我正在改变模型视图中的状态,我想知道什么是一个干净的方法来找出模型被引用的集合。
基本上它的工作方式如下:当一个模型被触发打开时,它需要首先上升一个级别并让集合查询其他模型并将当前“打开”的任何模型转为“关闭”。现在我正在传递每个模型视图对它来自的集合视图的引用,因此它可以从那里查询集合,但我觉得这可能是不好的做法。
答案 0 :(得分:3)
来自fine manual:
为方便起见,也会直接在集合中触发集合中模型触发的任何事件。
因此,如果更改集合中模型的属性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 });
}
});
}
set
上的{silent:true}
就是为了避免从内部记账中产生更多事件;在您的情况下,这可能适用也可能不适用。
演示:http://jsfiddle.net/ambiguous/VAnUq/
只有一个模型处于“开启”状态才是集合级属性,因此集合可以为其所有模型管理此模型。