整个要点Backbone.View
是将 DOM 子树的修改和事件处理封装到 View 类中。因此,Backbone 不支持您的方案。
您有几种选择可以实现相同的最终结果。
简单(但错误)的方法:使用 jQuery 监听标头的事件:
var ContentView = Backbone.View.extend({
initialize: function() {
$(".h_left").on('click', this.newLocation);
},
remove: function() {
$(".h_left").off('click', this.newLocation);
Backbone.View.prototype.remove.call(this);
}
});
这打破了标题元素的封装,并将内容视图与标题元素的实现紧密耦合。换句话说:意大利面。
正确方法:使用调解器将消息从标头传递到其他视图:
var HeaderView = Backbone.View.extend({
events: {
"click .h_left": "onLeftButtonClick"
},
onLeftButtonClick: function() {
//You can use the root Backbone object as a global event bus
//Publish a message
Backbone.trigger('header:leftbutton');
}
});
var ContentView = Backbone.View.extend({
initialize: function() {
//Subscribe to a message. If you use listenTo, the subscription is
//automatically cleared when your content view is destroyed.
this.listenTo(Backbone, 'header:leftbutton', this.newLocation);
},
newLocation: function() {
//..
}
});