1

解释:

使用 ember-data 时,会弹出许多不同的场景,这些场景似乎并不都与此时的内部工作方式相匹配。首先,一些数据:

{ "post":
  {
    "id": "60",
    "title": "Hello, Stack Overflow friends!",
    "comments": []
  }
}

说上面是数据库中的数据。

然后,通过分别调用每个客户端,在客户端 1 和客户端 2 上post获取一条记录。到目前为止,它们都有相同的记录——加载了一个空数组。post = App.Post.find(60)postcomments

稍后,在客户端 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记录之间的关联?commentaddObjectpost
4

1 回答 1

1

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

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

这个问题有一张公开的票https://github.com/emberjs/data/pull/695

于 2013-04-20T17:03:43.253 回答