如何用链接重新加载异步hasMany关系?

sly*_*7_7 12 javascript ember.js ember-data

让我们说

Post = DS.Model.extend({
  comments: DS.hasMany({async: true})
})

Comment = DS.Model.extend({
  post: DS.belongsTo()
})
Run Code Online (Sandbox Code Playgroud)

并且我必须使用该links功能,否则由于对帖子的评论过多而导致414错误.

自此提交https://github.com/emberjs/data/commit/4d717bff53f8c93bedbe74e7965a4f439882e259

似乎不可能触发post.get('comments')的重新加载,即发送GET请求,例如post/42/comments.

那有什么解决方案吗?

Mar*_*ior 15

UPDATE

就像@ sly7_7在下面的答案中说的那样,这个功能现在可以在ember-data中使用了.因此,如果您使用的是1.0.0-beta.11或更高版本,则不需要此代码

您可以重新打开ManyArray,并创建一个名为的新方法reloadLinks().具有以下内容:

var get = Ember.get;

DS.ManyArray.reopen({
    reloadLinks: function() {
        var records = get(this, 'content'),
        store = get(this, 'store'),
        owner = get(this, 'owner'),
        type = get(this, 'type'),
        name = get(this, 'name'),
        resolver = Ember.RSVP.defer();

        var meta = owner.constructor.metaForProperty(name);
        meta.type = type;
        var link = owner._data.links[meta.key];
        store.findHasMany(owner, link, meta, resolver);
    }
});
Run Code Online (Sandbox Code Playgroud)

用法如下:

comments.reloadLinks();
Run Code Online (Sandbox Code Playgroud)

看看那个小提琴http://jsfiddle.net/H6Gqf/

  • 很好的修复,但我需要为此修复添加一行额外的代码.在`store.findHasMany`上面只有一行,我补充说:`meta.type = type;`.我目前正在使用Ember Data 1.0.0-beta.8. (4认同)

sly*_*7_7 7

感谢@igorT,这是实现的.https://github.com/emberjs/data/pull/2297

现在,ManyArray有一个reload()方法,如果尚未加载关系,你甚至可以调用它.

您可以通过阅读测试来查看一些用例