Backbone:使用listenTo()进行跨视图事件绑定

时间:2014-02-03 04:47:19

标签: backbone.js backbone-events

我知道在Backbone中绑定事件的正确方法是使用listenTo()而不是on(),如blog post中所述。

initialize: function() {
    this.listenTo(this.model, 'change', this.render);
}

但是如果你需要跨视图绑定事件呢?

到目前为止,我一直在使用Backbone的全球pubsub:

Backbone.on('custom:event', this.handleEvent);

这没关系,但是我还没有找到一种解决这样的全球事件的干净方法。例如,如果视图被新实例替换,我可以这样做:

Backbone.off('custom:event').on('custom:event', this.handleEvent);

只要没有别人也在听,那就行不通,但肯定不理想。

我更喜欢使用listenTo(),但如果不指定将触发事件的视图实例,则不知道如何执行此操作。我想我可以在创建监听器时注入它,但这需要确保发布者已经实例化并且看起来很脆弱。

有没有人想出一种在视图之间绑定事件的好方法?

(如果重要,视图不相关 - a.k.a。子视图和父视图。)

1 个答案:

答案 0 :(得分:3)

listenTo只不过是:

Events.listenTo = function(obj, name, callback) {
  //...
  obj.on(name, callback, this);
  //...
};

同样地,stopListening是一堆围绕off的簿记。这意味着您可以listenTo通常采用onoff方法的任何内容:

this.listenTo(Backbone, 'custom:event', this.handleEvent, this);