我已经开始使用Backbone了。
在学习Backbone时,我知道使用.listenTo代替.on的优点是listenTo允许“对象跟踪事件”。
我没听到这句话试图说的话。好吧,我只能看到.on和.listenTo之间的区别是关于语法。
答案 0 :(得分:5)
考虑两个电话:
this.model.on('change', this.some_method);
this.listenTo(this.model, 'change', this.some_method);
在第一种情况下:
this.model
知道某人正在倾听'change'
事件但却不知道是谁。this
除非您明确跟踪您所做的on
来电,否则不知道它在听什么。在第二种情况下:
this.model
知道某人正在倾听'change'
事件但却不知道是谁。this
知道它正在收听来自this.model
的事件。所以是的,语法是不同的,但主要区别在于谁知道谁在听:使用on
,只有被监听的事物知道有一个监听器;使用listenTo
,听众也知道他们正在听什么。
如果您想停止收听活动,差异很重要。如果你正在使用on
,那么你必须保留自己所听的内容列表,以便off
他们;如果您使用的是listenTo
,那么listenTo
会对此进行跟踪,您只需stopListening
。
例如,View#remove
看起来像这样:
remove: function() {
this.$el.remove();
this.stopListening();
return this;
}
所以你可以调用view.remove()
它会自动清理你拥有的任何事件绑定(只要你使用listenTo
)并且僵尸听众的几率大大减少。