首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ember.js:在有效负载中重新加载通过“.hasMany”给定的链接关系

Ember.js:在有效负载中重新加载通过“.hasMany”给定的链接关系
EN

Stack Overflow用户
提问于 2014-05-19 09:53:41
回答 2查看 2.7K关注 0票数 53

假设我有两个模型,TopicPost

代码语言:javascript
复制
App.Topic = DS.Model.extend({
  posts: DS.hasMany('post', { async: true, inverse: 'post' });
});

App.Post = DS.Model.extend({
  topic: DS.belongsTo('topic', { async: true });
});

Topic hasMany帖子和belongsTo帖子主题。

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

收到此GET请求的有效负载后,序列化程序随后将一个links键附加到该有效负载。这具有加载与该主题相关联的帖子的路由:

代码语言:javascript
复制
"topic": {
   "id": 2,
   "links": {
      "posts": "/topics/2/posts"
   }
}

第二个请求(对/topics/2/posts)是如何加载帖子并将其附加到主题。

当第一次加载页面时,这一切都运行得很好。

在页面会话期间创建帖子时,会出现此问题。虽然我可以让主题本身重新加载(通过在表示主题的模型对象上调用.reload() ),但与主题关联的Posts而不是重新加载的。第二个API调用(用于获取帖子)甚至从未进行过,而第一个调用(仅用于获取主题)。如果我刷新页面,我在上一次加载页面时创建的帖子将会加载(当然,如果我随后再发一些帖子,它们直到下一次页面加载时才会显示出来)。

在寻找解决方案时,我遇到了这个问题:How to reload an async with links hasMany relationship?

然而,该解决方案似乎不再适用于当前版本的Ember/Ember-Data。提供的JSFiddle无法正常工作。

那么,我怎样才能重新加载这种hasMany关系呢?任何帮助都非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2015-03-25 17:20:37

代码语言:javascript
复制
DS.Model.reopen({
  reloadLink: function (linkKey) {
    if ($.isArray(linkKey)) {
      var promises = [];
      for (var i = 0; i < linkKey.length; i++) {
        promises.push(this.reloadLink(linkKey[i]));
      }
      return Em.RSVP.all(promises);
    } else {
      var rel = this._relationships[linkKey];
      if (rel) {
        if (rel.reload) {
          return rel.reload();
        } else if (rel.fetchLink) {
          return rel.fetchLink();
        }
      }
    }
  }
});

示例:

代码语言:javascript
复制
model: function () {
    var model = this.modelFor('_some_model_');
    return model.reloadLink(['link1', 'link2']).then(function () {
      return model;
    });
}
票数 2
EN

Stack Overflow用户

发布于 2014-11-24 23:34:26

所以在GitHub上有一个问题(到今天为止)还没有结束:https://github.com/emberjs/data/issues/1913

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

我使用的是websockets,所以每当创建新的帖子时,我只需通过websocket发送它,并使用数据来更新集合。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23728708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档