我有一个父视图(View.A)来管理子视图View.B和View.C. View.B有一个控制View.B上的事件的按钮界面。
设置
View.A
View.B
view.B.template.html
View.C
view.C.template.html
View.B.template.html
<div class="btn-group">
<button id="button-1" type="button" class="btn btn-default">
Button 1
</button>
<button id="button-2" type="button" class="btn btn-default">
Button 2
</button>
</div>
查看.B视图
var View.B = Backbone.View.extend({
template: _.template( view.B.template.html ),
events: {
'click #button-1': 'someMethod',
'click #button-2': 'anotherMethod'
},
...
})
我想要做的是使用View.B按钮控制View.C上的事件。我试图将delegatedEvents添加到View.C,以监听View.B模板中按钮ID的点击,但这不起作用。有解决办法吗?
答案 0 :(得分:3)
我会创建一个eventaggregator,类似于:
var vent = _.extend({}, Backbone.Events);
然后你可以听取并触发事件。所以你会有这样的事情:
// This would be from View.B
someMethod: function(ev) {
vent.trigger('someMethod', ev);
}
// And this would be in View.C
initialize: function() {
this.listenTo(vent, 'someMethod', this.mySomeMethod);
}
然后,您可以在必要时重用事件聚合器。 MarionetteJS这样做。