ember データにダーティ リレーションシップ トラッキングが組み込まれるまでは、独自のデータを展開してきました。(かなり古いものから) 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