在 ember data内置脏关系跟踪之前,我们推出了自己的。升级到 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']
});
}
但这显然是粗略的,我不确定它是否真的保证了我希望它保证的东西。
那么:有没有真正的方法可以做到这一点?更好的方法?这是即将推出的功能吗?
作为参考,我做了一个 codepen 插图:https ://codepen.io/patternleaf/pen/Vazdxj