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>

视图.B视图

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

我想做的是使用 View.B 按钮控制 View.C 上的事件。我试图将 delegatedEvents 添加到 View.C 以侦听 View.B 模板中按钮 ID 的点击,但这不起作用。有解决办法吗?

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 回答