在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