0

私は peepcode.com で Ember.js のプレイバイプレイを購入し、提供されたビデオに従いました。

そこで、Rails でモデルとシリアライザーとコントローラーをセットアップしました。

このようにURLを入力すると。

http://localhost:3000/actors/wycats

期待どおりにレンダリングされた JSON 応答。(おそらく、Ember-data は JSON 形式を期待しています..そうですか?)

 {
   "actor": {
     "id": 1,
     "blog": "http://www.yehudakatz.com",
     "company": "Tilde, Inc.",
     "email": "wycats@gmail.com",
     "gravatar_id": "428167a3ec72235ba971162924492609",
     "location": "San Francisco",
     "login": "wycats",
     "name": "Yehuda Katz",
     "actor_type": "User"
   }
 }

そこで、ember.js で Store と Actor Model をセットアップしました。

 GithubScore.Store = DS.Store.extend({
   revision: 11,
   adapter: "DS.RESTAdapter"
 });


 GithubScore.Actor = DS.Model.extend({
   login: DS.attr('string'),
   name: DS.attr('string'),
   gravatarId: DS.attr('string'),
   location: DS.attr('string'),
   blog: DS.attr('string')
 });

Ember アプリを起動しましたが、エラーは発生しませんでした。

しかし、コンソールを使用してモデルを取得しようとしたとき (ID が 1 のモデルが Rails DB に既に保存されていました)

 GithubScore.Actor.find(1)

クラスを返します。エラーは発生しませんでしたが、その属性を取得しようとすると。モデルのステータスは「isLoaded」ですが、null のみを返します。

 GithubScore.Actor.find(1).get('isLoaded')
 => true

 GithubScore.Actor.find(1).get('blog')
 => null

そして、GithubScore.Actor.find(1).get('isLoaded') を最初に繰り返し呼び出すと、false のみが返されることがわかりましたが、属性 'isLoaded' を取得しようとすると、すぐに true に変更されます。

 GithubScore.Actor.find(1).get('isLoaded')
 => false (for many times)

 GithubScore.Actor.find(1).get('blog')
 => null

 GithubScore.Actor.find(1).get('isLoaded')
 => true (immediately changed)

そして、ビデオのように .toJSON() メソッドをモデル化しようとすると。エラーがスローされます。

 GithubScore.Actor.find(1).toJSON()
 => TypeError: Object <GithubScore.Actor:ember272:1> has no method 'toJSON' 

私が興味を持っていることの 1 つは、GithubScore.Store オブジェクトが DS.Store から拡張されているということです。

DS.store が既に持っている find(type, id) メソッドはありません。

何が問題なのかわかりません。手伝ってくれませんか?

読んでくれてありがとう!

4

1 に答える 1

3

代わりに、ブログの値をテンプレートに表示して、ブラウザからアクセスしてみてください。実行するGithubScore.Actor.find(1).get('blog')と、Emberはオブジェクトをフェッチしている間にPromiseとしてオブジェクトを再調整しているため、nullが返されます。代わりにテンプレートに値を表示しようとすると、テンプレートは値にバインドされ、取得されると更新されます。

に関しては、明らかにそれはバグです、私はRecordArrayで同じ問題を経験しました、そしてそれは他の人々からのスタックオーバーフローに関する前の質問isLoaded = trueで報告されました。

于 2013-01-24T20:50:27.233 に答える