我知道在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。子视图和父视图。)
答案 0 :(得分:3)
listenTo
只不过是:
Events.listenTo = function(obj, name, callback) {
//...
obj.on(name, callback, this);
//...
};
同样地,stopListening
是一堆围绕off
的簿记。这意味着您可以listenTo
通常采用on
和off
方法的任何内容:
this.listenTo(Backbone, 'custom:event', this.handleEvent, this);