简体   繁体   English

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

[英]Backbone: mixin events extends from extending view

I have this mixin that is used by many views 我有很多视图使用的这个mixin

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

   /* common methods for table rows */
};

Now I have a new view that needs a couple more events than this mixin has: 现在,我有了一个新视图,需要比此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;

I have tried to just add these events to this.events (which is the mixins events). 我试图将这些事件仅添加到this.events(这是mixins事件)。 It works, but breaks all the other views using the mixin because those now look for the save and abort functions for some reason. 它可以工作,但是使用mixin破坏了所有其他视图,因为现在由于某些原因,这些视图正在寻找保存和中止功能。

How can I extend the mixin's events with the ones I need for this view only? 如何将混合事件扩展到仅此视图所需的事件?

var more_events = {
        events: {
          "click .remove" : "remove",
          "click .add" : "add"
        }
    },

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

your events is overridden by mixin. 您的事件被mixin覆盖。 you need merge them together. 您需要将它们合并在一起。 here i use lodash in place of underscore. 在这里,我用lodash代替下划线。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM