Javascript 主干视图赢得';无法覆盖继承的事件

Javascript 主干视图赢得';无法覆盖继承的事件,javascript,inheritance,backbone.js,Javascript,Inheritance,Backbone.js,我正在尝试覆盖已继承的事件。我是从你那里得到这个主意的 但是,无论我尝试什么,它都不会取代原始事件: 父视图: SD.defaultView = function(){ //Default controller for all views //extend the view with the default home view var HomeView = Backbone.View.extend({ el: 'body > shell',

我正在尝试覆盖已继承的事件。我是从你那里得到这个主意的

但是,无论我尝试什么,它都不会取代原始事件:

父视图:

SD.defaultView = function(){ //Default controller for all views
    //extend the view with the default home view
    var HomeView = Backbone.View.extend({
        el: 'body > shell',
        events: { //Add click events for global clicks
            'click footer saveBox': 'saveBox',
        },
        render: function () {
            //make sure we are logged in, if we are not forward back to home page
            SD.login.checkLoginState();

            //Output correct tempalte
            this.$el.html(templatesNeeded);
        },
        saveBox: function(){
            //Now we have added the who reload the sex details page.
            SD.pageLoad(SD.CURRENTSEX);
        },
    });
    SD.DV = new HomeView();
    SD.DV.render();
    return HomeView;
}();
子视图:

//set up homeview
var whoAdd = SD.defaultView.extend({
    el: 'page',
    events: function(){
        return _.extend({},SD.defaultView.prototype.events,{
            'keyup #who': 'otherFunctions',
            'click addContact': 'otherFunctions',
            'click footer saveBox' : 'addWho'
        });
    },
    template: JST['app/www/js/templates/details/whoAdd.ejs'],
    addWho: function(el){
        c(el);
    },
    render: function () {
        myself = this;
        this.$el.html(this.template);
        $('save').addClass('disabled');
        SD.setTitle('Who was involved?');
    }
});

当前
saveBox
将正常绑定。然而,我所看到的所有示例并不像我那样启动视图。我从一个自动执行的函数返回视图,虽然这不应该导致问题,但我认为继承可能在某个方面被搞砸了。

您的在定义上启动父视图就是问题所在

在父视图中进行初始化时,会添加父视图的单击事件

在子视图中,当您需要父视图对其进行扩展时,实际上是返回了实例化的对象,该对象已经在父元素中添加了click处理程序

扩展子对象中的父对象后,由于单击处理程序已绑定,因此只需在已添加到父对象中的单击处理程序之上添加另一个单击处理程序


如果不在定义上实例化父视图,则扩展事件应按计划进行。

您的想法是可靠的,代码中只存在一些问题。我是根据你的想法创作的。它显示共享事件的父视图->子视图类

您的问题标题提到“覆盖继承的事件”。您会注意到在JSFIDLE中,子视图实际上覆盖了父事件。为了让它运行,我必须在子系统中手动调用父系统的事件处理程序

下面是对代码的修改,使其更像JSFIDLE

var SD = {};

SD.DefaultView = (function(){ //Default controller for all views
    //extend the view with the default home view
    var HomeView = Backbone.View.extend({
        …
        events: { //Add click events for global clicks
            'click footer saveBox': 'saveBox',
        }
        …
    });
    return HomeView;
})();

//set up homeview
SD.WhoAddView = (function () {
    var WhoAddView = SD.DefaultView.extend({
        …
        events: function(){
            return _.extend({},SD.DefaultView.prototype.events,{
                'keyup #who': 'otherFunctions',
                'click addContact': 'otherFunctions',
                'click footer saveBox' : 'addWho'
            });
        }
        …
    });
    return WhoAddView;
})();

…

var view = new SD.WhoAddView();
$('body').append(view.render().el);

这两个答案都有用吗?