我正在更改模型视图的状态,我想知道什么是找出引用模型的集合的干净方法。
本质上它的工作原理是这样的:当一个模型被触发以“打开”时,它需要首先上升一个级别并让集合查询其他模型并将任何当前“打开”到“关闭”。现在我正在向每个模型视图传递一个对它来自的集合视图的引用,以便它可以从那里查询集合,但我觉得这可能是不好的做法。
我正在更改模型视图的状态,我想知道什么是找出引用模型的集合的干净方法。
本质上它的工作原理是这样的:当一个模型被触发以“打开”时,它需要首先上升一个级别并让集合查询其他模型并将任何当前“打开”到“关闭”。现在我正在向每个模型视图传递一个对它来自的集合视图的引用,以便它可以从那里查询集合,但我觉得这可能是不好的做法。
来自精美手册:
为方便起见,在集合中的模型上触发的任何事件也将直接在集合上触发。
因此,如果您更改集合中模型的属性 ,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}
on只是为了set
避免从内部簿记中产生更多事件;这可能适合也可能不适合您的情况。
演示:http: //jsfiddle.net/ambiguous/VAnUq/
只有一个模型处于“开启”状态是集合级别的属性,因此集合对其所有模型进行管理是有意义的。