从Backbone模型中查找集合

时间:2012-07-29 23:30:59

标签: collections backbone.js models

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

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

1 个答案:

答案 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/

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