Ember.js:通过有效负载中的"链接"重新加载.hasMany关系

Mik*_*ike 53 javascript ember.js ember-data

说我有两个型号,Topic并且Post:

App.Topic = DS.Model.extend({
  posts: DS.hasMany('post', { async: true, inverse: 'post' });
});

App.Post = DS.Model.extend({
  topic: DS.belongsTo('topic', { async: true });
});
Run Code Online (Sandbox Code Playgroud)

主题hasMany帖子和帖子belongsTo主题.

要从API加载数据,需要进行一次初始调用(例如,获取主题...主题ID 2): GET /topics/2

在接收到该GET请求的有效负载之后,串行器然后将links密钥附加到有效负载.这有加载与主题相关的帖子的路线:

"topic": {
   "id": 2,
   "links": {
      "posts": "/topics/2/posts"
   }
}
Run Code Online (Sandbox Code Playgroud)

第二个请求(to /topics/2/posts)是Posts加载和附加到主题的方式.

首次加载页面时,这一切都正常.

在页面会话期间创建Post时会发生此问题.虽然我可以让主题本身重新加载(通过调用.reload()代表主题的模型对象),但不会重新加载Posts与主题相关联的主题.第二API调用(获取职位)是从来没有制成,而在第一次调用(得到公正的话题)制作.如果我刷新页面,我在上一页加载时创建的帖子将加载(但当然,如果我再去做一些帖子,它们将在下一页加载之前不显示).

寻找解决方案,我遇到了这个问题: 如何使用链接重新加载异步hasMany关系?

但是,似乎该解决方案不再适用于当前版本的Ember/Ember-Data.提供的JSFiddle不起作用.

那么,我怎样才能重新加载这种hasMany关系呢? 任何帮助是极大的赞赏.

dhi*_*iva 1

所以 GitHub 上有一个问题尚未关闭(截至今天):https ://github.com/emberjs/data/issues/1913

我不知道如何重新加载它,但我想我会分享我为解决此问题所做的解决方法。

我正在使用 websocket,因此当创建新帖子时,我只需通过 websocket 发送它并使用数据来更新集合。

我知道这并不能解决 Ember Reload 的问题,但我想这对于已经在使用 Websockets / Socket.io 的人来说是一个不错的解决方案。