主干:mixin 事件从扩展视图扩展

Posted

技术标签:

【中文标题】主干:mixin 事件从扩展视图扩展【英文标题】:Backbone: mixin events extends from extending view 【发布时间】:2013-11-12 08:53:55 【问题描述】:

我有这个被许多视图使用的 mixin

var EditTableRowMixin = 
   events: 
     "click .save": "save",
     "click .abort": "abort"
   ,

   /* common methods for table rows */
;

现在我有了一个新视图,它需要比这个 mixin 更多的事件:

var SpecialRowEditView = Backbone.View.extend(
    tagName : "div",

    events: 
        "click .remove" : "remove",
        "click .add" : "add"
    ,
    initialize: function()
       /*Do things */
    ,
    ...
    ...
    ...            
  );
_.extend(SpecialRowEditView.prototype, EditTableRowMixin);
return SpecialRowEditView;

我试图将这些事件添加到 this.events (这是 mixins 事件)。它可以工作,但会破坏使用 mixin 的所有其他视图,因为这些视图现在出于某种原因寻找保存和中止功能。

我怎样才能用我只需要这个视图的事件来扩展 mixin 的事件?

【问题讨论】:

你可以试试SpecialRowEditView = SpecialRowEditView.extend( EditTableRowMixin ) 【参考方案1】:
var more_events = 
        events: 
          "click .remove" : "remove",
          "click .add" : "add"
        
    ,

_.extend(SpecialRowEditView.prototype, _.merge(EditTableRowMixin, more_events));

你的事件被 mixin 覆盖了。你需要将它们合并在一起。 这里我使用lodash 代替下划线。

【讨论】:

以上是关于主干:mixin 事件从扩展视图扩展的主要内容,如果未能解决你的问题,请参考以下文章

Django视图扩展类

DRF框架之视图的扩展类简介

主干视图的窗口调整大小事件

带有 Marionette 视图的主干模式 - 子视图事件没有被触发

子视图主干渲染上的事件

重新初始化主干视图后未触发事件