如何从子视图覆盖tagName,id,className,el和事件?

时间:2013-04-13 12:16:05

标签: inheritance backbone.js backbone-views backbone-events

假设我有以下Backbone结构:

 var BrowserView = Backbone.View.extend({
   el: 'body',
   events: {
     click : "onClickEvent"
   },

   initialize: function () {
     this.collections = [];
   }
 });

 var FileBrowserView = BrowserView.extend({
   el: '#file',
   className: 'file-class',
   events: {
     click: "onFileClick",
     mouseover: "onMouseOver"   
   },

   initialize: function () {
     this.constructor.__super__.initialize.apply(this);     
   }
 });

我需要覆盖子视图中的tagName,id,className,el属性,并将子视图中的事件对象与父视图结合起来。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

对于 tagName id className el 属性,您只需通过设置新值来覆盖它们就像你一样 对于事件,您可以使用与 initialize 方法相同的技巧,因为事件键可以是一个函数。

events: function(){
  return _.extend({}, this.constructor.__super__.events, {
    // list of events
  });
}

请注意,这不适用于多个继承级别,因此,确切的公式为:

events: function(){
  return _.extend({}, _.result(this.constructor.__super__, 'events'), {
    // list of events
  });
}