使用ember-data时,会弹出很多不同的场景,这些场景似乎并不像内部的工作方式那样。首先,一些数据:
{ "post":
{
"id": "60",
"title": "Hello, Stack Overflow friends!",
"comments": []
}
}
上面说的是数据库中的数据。
然后,通过分别在每个客户端上调用post
,在客户端1和客户端2 上获取<{1}}记录。到目前为止,它们都有相同的post = App.Post.find(60)
记录 - 加载了一个空的post
数组。
稍后,会在客户端2上创建评论。这可以通过调用comments
来完成。
然后将评论数据保存在服务器端,如下所示:
comment = App.Comment.createRecord({text: "Why, hello there.", post: post})
此时,客户端2是最新的 - 因为这是评论的创建地点 - 但客户端1不同步,因为它不知道新评论。
现在,客户端1可能会以某种方式(通过XHR或WS)了解新创建的评论。
一旦客户端1知道了id,就会通过调用{ "comment":
{
"id": "80",
"text": "Why, hello there.",
"post_id": "60"
}
}
来获取comment
记录。
...然而,在客户端1上调用comment = App.Comment.find(80)
会产生0条评论。即使成功提取了新评论,也没有post.get('comments')
和comment
之间的关联。
post
记录与comment
记录相关联。注意1:这不会发生,因为在客户端1上,post
记录最初加载了post
。如果数组包含注释ID comments: []
,那么这将起作用(除了注释在加载时不存在的事实)。
注意2:我可以通过在客户端1上调用80
手动添加关联,但这会弄脏post.get('comments').addObject(comment)
记录并且似乎不是处理此问题的正确方法。
post
和post
记录之间的关联,这些记录不涉及使用comment
或任何污染{{1}的类似函数记录?答案 0 :(得分:1)
当您加载具有belongsTo
关系的记录时,ember数据当前不会更新关系的“父”记录。
在您的情况下解决此问题的一种方法是侧载“父”记录。在您的情况下,您将(通过XHR或WS)发送comment
和post
。