A change
当属性更改时,Backbone 会触发事件set
。正如您所看到的,该事件也会在集合上触发。但是,你的价值subtabs
属性根本没有改变,它仍然是您在中创建的同一个对象defaults
。如果你用过tab.set('subtabs', new Subtabs);
你会得到一个change:subtabs
事件,但您不想这样做。
我认为您必须在代码中执行某些操作才能在选项卡模型上触发新事件。
// Tab Model
var Tab = Backbone.Model.extend({
defaults: { label: undefined, subtabs: new Subtabs},
initialize: function(){
// listen for change in subtabs collection.
this.get('subtabs').on('change', this.subtabsChanged, this);
},
subtabsChanged: function(model) {
// trigger new event.
this.trigger('subtab:change', this, model);
}
});
然后你可以监听该事件:
tabs.on('subtab:change', function(tab, subtab) {
console.log(tab.get('label'));
console.log(subtab.get('label'));
});
我想这会起作用。但我想我想知道为什么您会监听选项卡集合以获取子选项卡的更改。在大多数情况下,最好只监听子选项卡集合本身的更改事件。
tab.get('subtabs').on('change', function(model){
// do something with model, which is a Subtab.
});
EDIT: http://jsfiddle.net/phoenecke/DvHqH/1/