如何处理ember-data中记录之间的关联

时间:2012-11-23 11:49:54

标签: ember.js ember-data

说明:

使用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之间的关联。

问题:

  • 在客户端1上提取评论时,没有发生自动关联魔术将post记录与comment记录相关联。

注意1:这不会发生,因为在客户端1上,post记录最初加载了post。如果数组包含注释ID comments: [],那么这将起作用(除了注释在加载时不存在的事实)。

注意2:我可以通过在客户端1上调用80手动添加关联,但这会弄脏post.get('comments').addObject(comment)记录并且似乎不是处理此问题的正确方法。

问题:

  • 有没有办法以某种方式在客户端1上创建postpost记录之间的关联,这些记录不涉及使用comment或任何污染{{1}的类似函数记录?

1 个答案:

答案 0 :(得分:1)

当您加载具有belongsTo关系的记录时,ember数据当前不会更新关系的“父”记录。

在您的情况下解决此问题的一种方法是侧载“父”记录。在您的情况下,您将(通过XHR或WS)发送commentpost

这个问题的开放票证https://github.com/emberjs/data/pull/695