骨幹視圖有Backbone.Events
混合,所以視圖可以產生自己的事件,其他視圖可以監聽這些事件。所以在選擇時,你AvatarView
可以觸發事件:
select: function() {
// Mark this avatar as selected...
this.trigger('selected', this);
},
unselect: function() {
// Undo the "mark this avatar as selected" from above.
}
,然後AvatarAppView
可以監聽這些事件:
initialize: function() {
_.bindAll(this, 'selected');
//...
},
render: function() {
this.kids = [ ];
this.collection.each(function(m) {
var v = new AvatarView({ model: m });
v.on('selected', this.selected);
this.kids.push(v);
this.$el.append(v.render().el);
}, this);
return this;
}
那麼對於AvatarAppView
簡單selected
事件處理程序取消選擇其他AvatarView
小號:
selected: function(v) {
_.chain(this.kids).reject(function(k) { return k == v }).invoke('unselect');
}
演示:http://jsfiddle.net/ambiguous/thRHK/
太棒了!教我很多,謝謝。 – goofansu 2012-07-21 02:37:05
我將avatarView和avatarAppView分成兩個文件,並將this.trigger('selected',this);無法在avatarAppView中觸發'selected'事件。 – goofansu 2012-07-21 02:58:07
@goofansu:但是當它們在同一個文件中時它起作用了?事件觸發時會發生什麼? – 2012-07-21 03:36:54