ember数据关系和ready / loaded事件

时间:2016-03-31 18:06:53

标签: javascript ember.js ember-data relationships dirty-data

在ember数据has built-in dirty relationship tracking之前,我们已经推出了自己的数据。在升级到Ember / Ember Data 2.4.3(从很旧的东西)之后,我们的自定义解决方案停止了工作。

问题归结为知道何时将记录关系状态的快照作为"原始"我们可以比较后来国家的状态。

让我们说适配器的有效负载包括以下内容:

{
    id: 'post-1',
    type: 'post',
    relationships: {
        comments: {
            data: [{ type: 'comment', id: 'comment-1' }]
        }
    }
}

在结果记录的ready挂钩中,并使用新的参考API,我希望能够说出类似的内容:

ready: function() {
    var commentIds = this.hasMany('comments').ids();
    // would expect commentIds to be ['comment-1']
}

但这似乎不起作用 - commentIds是一个空数组。

(请注意,观察isLoaded属性似乎也无法提供我想要的内容 - 当loaded事件触发时,记录已处于ready状态。 )

基本上我希望有类似relationshipsLoaded事件的内容,当记录的关系已经填充关于适配器的有效负载时会被触发。相关记录本身可能无法使用或加载,但根据适配器返回的数据,这不应影响记录的关系状态。

经过一番探索后,我发现挂在商店的后座上会提供一些似乎有用的东西:

ready: function() {
    this.store._backburner.schedule('finished', this, function() {
        var commentIds = this.hasMany('comments').ids();
        // commentIds is now ['comment-1']
    });
}

但这显然是粗略的,我不确定它是否真的保证我希望它能保证什么。

所以:有没有真正的方法呢?更好的方法?这是一个即将推出的功能吗?

作为参考,我制作了一个代码插图:https://codepen.io/patternleaf/pen/Vazdxj

0 个答案:

没有答案