1. ホーム
  2. javascript

[解決済み] バックボーンビュー。親からイベントを継承・拡張する

2022-05-15 18:41:51

質問

Backboneのドキュメントに記載されています。

eventsプロパティは、イベントハッシュを返す関数として定義することもでき、プログラムによるイベントの定義や、親ビューからの継承を容易にすることができます。

親のビューイベントを継承して拡張するにはどうすればよいですか?

親ビュー

var ParentView = Backbone.View.extend({
   events: {
      'click': 'onclick'
   }
});

子ビュー

var ChildView = ParentView.extend({
   events: function(){
      ????
   }
});

どのように解決するのですか?

一つの方法として

var ChildView = ParentView.extend({
   events: function(){
      return _.extend({},ParentView.prototype.events,{
          'click' : 'onclickChild'
      });
   }
});

もう一つは

var ParentView = Backbone.View.extend({
   originalEvents: {
      'click': 'onclick'
   },
   //Override this event hash in
   //a child view
   additionalEvents: {
   },
   events : function() {
      return _.extend({},this.originalEvents,this.additionalEvents);
   }
});

var ChildView = ParentView.extend({
   additionalEvents: {
      'click' : ' onclickChild'
   }
});

Eventsが関数かオブジェクトかを確認する

var ChildView = ParentView.extend({
   events: function(){
      var parentEvents = ParentView.prototype.events;
      if(_.isFunction(parentEvents)){
          parentEvents = parentEvents();
      }
      return _.extend({},parentEvents,{
          'click' : 'onclickChild'
      });
   }
});