バックボーンビューが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;
}
次に、他のsの選択を解除するselected
ための単純なイベントハンドラー:AvatarAppView
AvatarView
selected: function(v) {
_.chain(this.kids).reject(function(k) { return k == v }).invoke('unselect');
}
デモ: http: //jsfiddle.net/ambiguous/thRHK/