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