皆さん、次の状況でのベストプラクティスとAPIの詳細について疑問に思っています。
モデル選択があるとしましょう:
Selection = Backbone.Model.extend({
defaults: {
value : null,
related: null,
other: null,
stuff: null
}
}
'related'も設定せずに'value'だけを変更する場合は、'related'をnullに設定します---カスケード更新のソート。
'value'が変更されたときに'related'の更新された値を確認する必要がある他のリスナーがあります。したがって、これらのリスナーのいずれかが呼び出されたときに、それに応じて「関連」が更新されることを保証したいと思います。
したがって、おそらく、Selectionモデル自体に「change:value」をリッスンさせ、必要に応じて「related」を設定することができます。しかし、Backboneは、そのリスナーが'change:value'の他のリスナーの前に呼び出されることを保証しますか?同様に、修飾されたイベントが一般的なイベントの前に発生することが保証されているので、「change:value」は「change」の前にありますか?
これを行うためにイベントシステムに依存することは壊れやすいように思われるので、私たちはいくつかのフックを探しました。見つけることができる最も近いものは_validate/validateメソッドであり、Selectionモデルに次のようなものを追加できます。
// Use _validate as a "before-set call" to set 'related' if necessary
_validate: function(attrs, options) {
if (!_.has(attrs, 'related') && _.has(attrs, 'value') &&
!_.isEqual(attrs.value, this.attributes.value)) {
attrs.related = null;
}
return true;
}
もちろん、これは「検証」によって暗示されるセマンティクスに反します。
どんなガイダンスでも大歓迎です。