3

子ビュー View.B と View.C を管理する親ビュー (View.A) があります。View.B には、View.B のイベントを制御するボタン インターフェイスがあります。

設定

View.A
  View.B
    view.B.template.html
  View.C
    view.C.template.html

View.B.template.html

<div class="btn-group">
  <button id="button-1" type="button" class="btn btn-default">
    Button 1
  </button>
  <button id="button-2" type="button" class="btn btn-default">
    Button 2
  </button>
</div>

View.Bビュー

var View.B = Backbone.View.extend({
  template: _.template( view.B.template.html ),
  events: {
    'click #button-1': 'someMethod',
    'click #button-2': 'anotherMethod'
  },
  ...
})

私がやりたいのは、View.C と View.B ボタンでイベントを制御することです。View.B テンプレートのボタン ID のクリックをリッスンする delegatedEvents を View.C に追加しようとしましたが、うまくいきません。これに対する回避策はありますか?

4

1 に答える 1

3

次のようなイベントアグリゲーターを作成します。

var vent = _.extend({}, Backbone.Events);

次に、そのイベントをリッスンしてトリガーできます。したがって、次のようになります。

// This would be from View.B
someMethod: function(ev) {
    vent.trigger('someMethod', ev);
}

// And this would be in View.C
initialize: function() {
    this.listenTo(vent, 'someMethod', this.mySomeMethod);
}

その後、必要に応じてイベント アグリゲーターを再利用できます。MarionetteJSがこれを行います。

于 2013-08-09T15:45:32.303 に答える