0

我创建了一个继承自 Backbone.View 的类,它定义了一些 DOM 事件:

var MyView = Backbone.View.extend({
  el: '#myview',
  events: {
    'click .somebutton': 'somefunction',
    'click .otherbutton': 'otherfunction'
  },
  somefunction: function(){ console.log('somefunction!'); },
  otherfunction: function(){ console.log('otherfunction!');  }
});

实例化此视图 ( new MyView();) 时,一切似乎都井井有条,并且每当单击元素时都会触发我的回调。

但是,如果我像这样实例化我的视图:

new MyView({
  events: {
    'click .thirdbutton': function(){ 
       console.log('thirdfunction'); 
    }
  }
});

我所有现有的班级事件都被这个单一的事件所覆盖。将我的仅实例事件与现有类事件合并的正确方法是什么?在我的示例中,我希望所有 3 个事件在我的实例中都处于活动状态。

4

2 回答 2

1

你可以在 - 方法中做到这initialize一点

initialize: function() {
  _.extend(this.events, {
    'click .thirdbutton': function() {...}
  });
}

这可能不是最漂亮的答案,但它应该有效。

于 2013-09-27T11:02:46.543 回答
0

感谢这个答案,找到了一个解决方案: Backbone View: Inherit and extend events from parent

我在类的选项中添加了一个extraEvents键,并将我的events对象更改为一个合并额外事件的函数。下面的代码示例,如果它对其他人有帮助:

var MyView = Backbone.View.extend({
  el: '#myview',
  options: {
    extraEvents: {}      
  },
  originalEvents: {
    'click .somebutton': 'somefunction',
    'click .otherbutton': 'otherfunction'
  },
  events: function(){
    return _.extend({}, this.originalEvents, this.options.extraEvents);
  },
  somefunction: function(){ console.log('somefunction!'); },
  otherfunction: function(){ console.log('otherfunction!');  }
});

现在我可以像这样实例化我的视图:

new MyView({
  extraEvents: {
    'click .thirdbutton': function(){ 
       console.log('thirdfunction'); 
    }
  }
});
于 2013-09-27T11:15:01.337 回答