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();

两个请求被发送到服务器。但是,如果我随后返回以下 JSON(用于文件):

{ "id": 1, like: true }

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

谢谢你的帮助!

4

2 回答 2

1

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

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

所以评论会在需要时被延迟加载。

关于第二部分:您当然不会序列化来自服务器的回复的评论 ID,因此评论会被重置,因为您描述的是一个空的评论列表。

您至少应该返回之前显示的评论 ID...这两个问题是相互关联的。

于 2012-09-11T07:28:43.973 回答
0

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

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

于 2012-12-04T09:41:11.523 回答