在backbone.js的子视图中写的火事件

时间:2014-12-05 10:51:08

标签: javascript backbone.js backbone-views backbone-events

我正在使用骨干js。 假设我有一个名为“childView'以及一个名为' parentView'。

的父视图
parentView = Backbone.View.extend({
  render: function () {
    new childView().render();
  }
})

childView = Backbone.View.extend({
  render: function () {

  },
  events: {
    'click .abc' : 'fireEvent'
  }
})

我需要在parentView中调用在childView中编写的click事件。

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用Backbone.View的实例。 Backbone.ViewBackbone.Events混合在一起,可以将其用作事件聚合器。

您的案例示例:

childView = Backbone.View.extend({
  render: function () {

  },
  events: {
    'click .abc' : 'fireEvent'
  }, 
  fireEvent: function (e) {
      this.trigger('child:event:fired', e);
  }
});

在父视图中:

parentView = Backbone.View.extend({
  render: function () {
    this.childView = new childView();
    this.childView.on('child:event:fired', this.onChildEvent, this);
    childView .render();
  }, 
  onChildEvent: function (e) {
        console.log("child view event");
  },
  closeThisView: function () {
    this.childView.off('child:event:fired', this.onChildEvent, this);
  }
})

这样您就可以订阅childView事件,但是您需要手动管理所有订阅的解除绑定。


通过为两个视图声明全局事件聚合器,可以找到针对同一问题的另一种解决方案。

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

在您的观看中,只需使用vent.trigger触发所需的事件,并使用vent.(on/off)方法订阅/取消订阅。