我正在使用Backbone应用程序,并且有一些视图继承自我的其他自定义视图。为了继承父视图定义的事件,我在子的构造函数中使用了_.extend({}, superEvents, this.events)
。这在除了Firefox之外的任何地方都可以。在Firefox(在21上测试)中,扩展事件仅包括超级事件,没有使用this.events
定义的事件。
以下是代码。也做了一个小提琴here
var ParentView = Backbone.View.extend({
events: {
'click .nav-icon.cancel': 'hideView'
},
initialize: function() { },
hideView: function (event) { }
});
var ChildView = ParentView.extend({
events: {
'click .items a': 'doSomething'
},
constructor: function () {
// Save reference of the super class prototype
this.super = ParentView.prototype;
//console.log(this.events); // uncomment it and it will work fine
this.events = $.extend({}, this.super.events, this.events);
console.log(this.events);
this.super.constructor.apply(this, arguments);
},
initialize: function() {
this.super.initialize.call(this);
},
doSomething: function (event) { }
});
注意:当我在子节目中创建一个局部变量或将其名称更改为其他内容时,例如childEvents
,它可以正常工作。令人惊讶的是,如果我在扩展之前进行console.log(this.events)
工作正常。