0

假设我有不同的视图,每个视图都有特定于events: { "dblclick div.editable": "edit" }
我想edit在不同视图之间共享功能(然后也保存)的项目的 DOM 事件。

var View1 = Backbone.View.extend({

     events: { "dblclick div.editable": "edit" },

     edit: function () {} // function I would like to share btw diff views
});

var View2 = Backbone.View.extend({

     events: { "dblclick div.editable": "edit" },

     edit: function () {} // function I would like to share btw diff views
});

有可能吗?
最好的方法是什么?
有一些例子吗?

4

2 回答 2

2

Backbone patterns 网站上,描述了如何使用Mixins来解决这种设计问题:

问题:有时您对多个对象具有相同的功能,而将对象包装在父对象中是没有意义的。例如,如果您有两个共享方法的视图,但没有——也不应该——有一个共享的父视图。

解决方案:对于这种情况,使用 mixin 是合适的。

所以在这种情况下,它可能是这样的:

App.Mixins.Editable = {
  edit: function() { /* ... */ },

  open: function() { /*... */ },

  close: function() { /* ... */ }
};

App.Views.YourEditPage = Backbone.View.extend(
  _.extend({}, App.Mixins.Editable, {

   events: { "dblclick div.editable": "edit" },

  // (Methods and attributes here)

}));
于 2012-05-10T15:09:03.163 回答
1

即使我认为@IntoTheVoid 更优雅,我也想公开一个非常简单的方法:一个 Utils 模块:

var App = function(){};

App.Utils = {
  myCommonFunction: function( param ){ 
    // code 
  }
}

var View1 = Backbone.View.extend({
     events: { "dblclick div.editable": "edit" },
     edit: function() {
       App.Utils.myCommonFunction( "param" );
     }
});

var View2 = Backbone.View.extend({
     events: { "dblclick div.editable": "edit" },
     edit: function() {
       App.Utils.myCommonFunction( "param" );
     }
});
于 2012-05-10T15:39:41.093 回答