我正在使用骨干js。 假设我有一个名为“childView'以及一个名为' parentView'。
的父视图parentView = Backbone.View.extend({
render: function () {
new childView().render();
}
})
childView = Backbone.View.extend({
render: function () {
},
events: {
'click .abc' : 'fireEvent'
}
})
我需要在parentView中调用在childView中编写的click事件。
答案 0 :(得分:2)
最简单的方法是使用Backbone.View
的实例。 Backbone.View
与Backbone.Events
混合在一起,可以将其用作事件聚合器。
您的案例示例:
childView = Backbone.View.extend({
render: function () {
},
events: {
'click .abc' : 'fireEvent'
},
fireEvent: function (e) {
this.trigger('child:event:fired', e);
}
});
在父视图中:
parentView = Backbone.View.extend({
render: function () {
this.childView = new childView();
this.childView.on('child:event:fired', this.onChildEvent, this);
childView .render();
},
onChildEvent: function (e) {
console.log("child view event");
},
closeThisView: function () {
this.childView.off('child:event:fired', this.onChildEvent, this);
}
})
这样您就可以订阅childView事件,但是您需要手动管理所有订阅的解除绑定。
通过为两个视图声明全局事件聚合器,可以找到针对同一问题的另一种解决方案。
var vent = _.extend({}, Backbone.Events);
在您的观看中,只需使用vent.trigger
触发所需的事件,并使用vent.(on/off)
方法订阅/取消订阅。