我有以下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 }
我的第一个可见评论再次消失。为什么?我该怎么做?
感谢您的帮助!
答案 0 :(得分:1)
关于问题的第一部分:您应该在文件的数据中填充注释ID:
App.store.load(App.File, {id: 1, like: false, comments: [1, 2, 3]});
因此,评论将在需要时延迟加载。
关于第二部分:您当然没有在服务器的回复中序列化注释ID,因此重置注释,因为您描述了一个空的注释列表。
您至少应该返回注释ID,如前所示...这两个问题是相互关联的。
答案 1 :(得分:0)
看起来 part 的答案是在适配器中使用DS.Adapter.findAssociation(...)
方法。但是,当从服务器再次加载父记录时,我遇到了与您相同的问题 - 所有子记录都被删除了。
我发布了my own question,看看我是否可以解决这个问题。如果这个问题得到解答,它可能也是你的答案。