1

このフィドルのごく一部: http://jsfiddle.net/v2t67/が私の質問に表示されますが、私の問題は、子モデル、つまりコメント モデルの json をクエリできないことです。今のところ、以下のクエリを使用して chrome 開発者コンソールから親オブジェクト (Post Model) にアクセスでき、コンソールで親オブジェクトを含む結果から、それをクリックすると、次のように埋め込まれたコメントが表示されます。このスクリーンショット: http://imgur.com/3WL4I

では、objectAt(0).toJSON() を使用してコメントを照会し、親オブジェクトをクリックすることなくコメントを直接返すにはどうすればよいでしょうか。

どうもありがとう。

 yt = App.store.findAll(App.Post)
 yt.objectAt(0).toJSON()   //to display the json for post

App.Comment = DS.Model.extend({
    content: DS.attr('string'),
    post: DS.belongsTo('App.Post')
});


App.Post = DS.Model.extend({
    body: DS.attr('string'),
    comments: DS.hasMany('App.Comment', { embedded: true } )
});
4

1 に答える 1

1
 App.Comment = DS.Model.extend({
   content: DS.attr('string'),
   post: DS.belongsTo('App.Post')
 });


 App.Post = DS.Model.extend({
   body: DS.attr('string'),
   comments: DS.hasMany('App.Comment', { embedded: true } )
 });

完全なコードについては、** http://jsfiddle.net/v2t67/ **を参照してください。

ソースから関連付けのテストを読んだ後、それを行う方法を見つけました。関連付けのテストはこちら: ** https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/associations_test.js **

例として上記の 2 つのモデルに固執すると、次のようにして、埋め込みモデル (コメント モデル) の json データをクエリできます。

      **Approach 1**

 query = App.store.find(App.Post,  1)
 query.get('comments').objectAt(0).toJSON()

さらにチェックを行っているときに、親モデル (Post モデル) の json が必要な場合、上記が機能しないことがわかりました。これは私がそのためのjsonに行く方法です:

      **Approach 2**

 query = App.store.find(App.Post)
 query.objectAt(0).toJSON()

アプローチ 1 を使用して Post Model の json データを取得しようとすると、TypeError: Object has no method 'objectAt'が返され、取得しようとするとTypeError: Cannot call method 'objectAt' of undefinedが返されます。アプローチ 2 を使用した埋め込みモデルの json データ。

何か新しいことがわかったら、これを更新します。

           **UPDATE**

以下に示すように、 {associations: true}toJSON() 関数に渡すことで、埋め込みモデルの json データをエラーなしで返すアプローチ 2 を取得できます。

 query = App.store.find(App.Post)
 query.objectAt(0).toJSON({associations: true})
于 2012-08-25T22:10:05.003 に答える