Collections 从主干中的模型查找集合

Collections 从主干中的模型查找集合,collections,backbone.js,models,Collections,Backbone.js,Models,我正在更改一个模型视图的状态,我想知道用什么方法可以清楚地找到模型引用的集合 本质上,它是这样工作的:当一个模型被触发打开时,它需要首先上升一个级别,让集合查询其他模型,并将当前打开的任何模型打开到关闭。现在,我正在向每个模型视图传递一个对它所来自的集合视图的引用,以便它可以从那里查询集合,但我觉得这可能是一种不好的做法 来自: 为方便起见,在集合中的模型上触发的任何事件也将直接在集合上触发 因此,如果在集合中的模型上更改属性active,则模型和集合都将触发“change:active”事件。

我正在更改一个模型视图的状态,我想知道用什么方法可以清楚地找到模型引用的集合

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

来自:

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

因此,如果在集合中的模型上更改属性
active
,则模型和集合都将触发
“change:active”
事件。您可以让集合自行侦听相应的
“更改”
事件:

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}
只是为了避免从内部簿记中生成更多事件;这在您的情况下可能合适,也可能不合适

演示:

只有一个模型处于“打开”状态是集合级别属性,因此集合可以为其所有模型管理此属性。

来自:

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

因此,如果在集合中的模型上更改属性
active
,则模型和集合都将触发
“change:active”
事件。您可以让集合自行侦听相应的
“更改”
事件:

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}
只是为了避免从内部簿记中生成更多事件;这在您的情况下可能合适,也可能不合适

演示:


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

Mu,您可以继续保存一天。非常感谢。穆,你一直在节省时间。非常感谢。