0

我正在更改模型视图的状态,我想知道什么是找出引用模型的集合的干净方法。

本质上它的工作原理是这样的:当一个模型被触发以“打开”时,它需要首先上升一个级别并让集合查询其他模型并将任何当前“打开”到“关闭”。现在我正在向每个模型视图传递一个对它来自的集合视图的引用,以便它可以从那里查询集合,但我觉得这可能是不好的做法。

4

1 回答 1

3

来自精美手册

为方便起见,在集合中的模型上触发的任何事件也将直接在集合上触发。

因此,如果您更改集合中模型的属性 ,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/

只有一个模型处于“开启”状态是集合级别的属性,因此集合对其所有模型进行管理是有意义的。

于 2012-07-29T23:47:23.543 回答