7

次の Emberjs データ モデルがあります。

App.File = DS.Model.extend({
  like: DS.attr('boolean'),
  comments: DS.hasMany('App.Comment')
});

App.Comment = DS.Model.extend({
  file: DS.belongsTo('App.File'),
  comment: DS.attr('string')
});

そしてそれをプリロードします:

 App.store.load(App.File, {id: 1, like: false});

今、私がこのようなコメントを受け取ったら、私は考えました:

var f = App.store.find(App.File, 1);
var c = f.get("comments");

var c は空の EmberArray であり、リクエストがサーバーに送信されます。でもリクエスト来ないの?なぜ、どのようにそれをしなければならないのですか?コメントをプリロードしたくありません。

さらに、コメントを追加すると同時にファイルを変更すると、次のようになります。

f.get("comments").createRecord({comment: "test"});
f.set("like", true);
App.store.commit();

2 つの要求がサーバーに送信されます。しかし、次の JSON (ファイル用) を返すと:

{ "id": 1, like: true }

最初に表示されたコメントが再び表示されなくなります。なんで?そして、私は何をしなければなりませんか?

ご協力いただきありがとうございます!

4

2 に答える 2

1

質問の最初の部分について:ファイルのデータにコメント ID を入力する必要があります。

App.store.load(App.File, {id: 1, like: false, comments: [1, 2, 3]});

したがって、コメントは必要に応じて遅延読み込みされます。

2番目の部分について:サーバーからの返信でコメントIDをシリアル化しないので、空のコメントリストを記述するとコメントがリセットされます。

少なくとも、直前に示したようにコメント ID を返す必要があります... 2 つの問題はリンクしています。

于 2012-09-11T07:28:43.973 に答える
0

これに対する答えの一部DS.Adapter.findAssociation(...)は、アダプターでメソッドを使用することです。ただし、親レコードがサーバーから再度読み込まれると、あなたと同じ問題が発生します。すべての子レコードがザッピングされます。

これを整理できるかどうかを確認するために、独自の質問を投稿しました。その質問に答えがあれば、それはおそらくあなたの答えにもなるでしょう。

于 2012-12-04T09:41:11.523 に答える