0

我正在使用 Backbone 应用程序,并且有一些从我的其他自定义视图继承的视图。为了继承父视图定义的事件,我_.extend({}, superEvents, this.events)在子构造函数中使用过。除了在 Firefox 中,这在任何地方都可以正常工作。在 Firefox(在 21 上测试)中,扩展事件仅包括超级事件,没有使用this.events.

下面是代码。也在这里做了一个小提琴

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)在扩展之前做一个工作正常。

4

0 回答 0