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

バックボーン パターンのサイトでは、Mixinsを使用してこの設計上の問題を解決する方法が説明されています。

問題: 複数のオブジェクトに対して同じ機能を使用している場合に、オブジェクトを親オブジェクトでラップする意味がない場合があります。たとえば、メソッドを共有する 2 つのビューがあるが、共有の親ビューを持っていない (そしてそうすべきではない) 場合。

解決策: このシナリオでは、ミックスインを使用するのが適切です。

したがって、この場合は次のようになります。

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 に答える