モデルビューの状態を変更していますが、モデルが参照されているコレクションを見つけるためのクリーンな方法は何でしょうか。
基本的には次のように機能します。モデルが「オン」になるようにトリガーされると、最初にレベルを上げて、コレクションで他のモデルにクエリを実行し、現在「オン」から「オフ」になっているモデルをオンにする必要があります。現在、各モデルビューに、元のコレクションビューへの参照を渡して、そこからコレクションをクエリできるようにしていますが、これは悪い習慣かもしれません。
モデルビューの状態を変更していますが、モデルが参照されているコレクションを見つけるためのクリーンな方法は何でしょうか。
基本的には次のように機能します。モデルが「オン」になるようにトリガーされると、最初にレベルを上げて、コレクションで他のモデルにクエリを実行し、現在「オン」から「オフ」になっているモデルをオンにする必要があります。現在、各モデルビューに、元のコレクションビューへの参照を渡して、そこからコレクションをクエリできるようにしていますが、これは悪い習慣かもしれません。
細かいマニュアルから:
コレクション内のモデルでトリガーされるイベントは、便宜上、コレクションでも直接トリガーされます。
したがって、コレクション内のモデルの属性を変更するactive
と、モデルとコレクションの両方で"change:active"
イベントがトリガーされます。"change"
コレクションに適切なイベントをリッスンさせることができます。
initialize: function() {
_.bindAll(this, 'active_changed');
this.on('change:active', this.active_changed);
},
active_changed: function(active_m) {
if(!active_m.get('active'))
return;
this.each(function(m) {
if(m.id != active_m.id) {
console.log('Updating ' + m.id);
m.set({ active: false }, { silent: true });
}
});
}
{silent:true}
オンset
は、内部の簿記からさらに多くのイベントが生成されるのを避けるためにあります。これはあなたの場合には適切かもしれないし、そうでないかもしれません。
デモ: http: //jsfiddle.net/ambiguous/VAnUq/
「オン」状態のモデルを1つだけ持つことはコレクションレベルのプロパティであるため、コレクションがすべてのモデルに対してこれを管理することは理にかなっています。