Emberjs数据以后如何加载hasMany数据



我有以下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();

向服务器发送两个请求。但是如果我返回以下JSON(对于文件):

{ "id": 1, like: true }

我的第一条可见评论再次消失。为什么?我该怎么办?

谢谢你的帮助!

关于问题的第一部分:您应该在文件的数据中填充注释ID:

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

因此,在需要时,注释将被延迟加载。

关于第二部分:您肯定不会序列化服务器回复上的注释ID,因此注释会重置,因为您描述的是一个空的注释列表。

您至少应该返回刚才显示的注释ID。。。这两个问题是联系在一起的。

答案的部分似乎是在适配器中使用DS.Adapter.findAssociation(...)方法。然而,当从服务器再次加载父记录时,我遇到了与您相同的问题——所有子记录都会被删除。

我已经发布了我自己的问题,看看我是否能解决这个问题。如果这个问题得到了回答,它很可能也是你的答案。

最新更新