2013-06-20 44 views
2

我已经开始使用Backbone。通过listenTo跟踪骨干事件

在学习Backbone时,我知道使用.listenTo而不是.on的优点是listenTo允许“对象跟踪事件”。

我没有得到这句话想说什么。那么我只能看到.on和.listenTo之间的区别是关于语法的。

回答

5

考虑两个呼叫:

this.model.on('change', this.some_method); 
this.listenTo(this.model, 'change', this.some_method); 

在第一种情况:

  1. this.model知道有人在监听'change'事件,但它不知道是谁。
  2. this不知道它在听什么,除非您明确跟踪您所做的电话号码为on

在第二种情况:

  1. this.model知道有人在监听'change'事件,但它不知道是谁。
  2. this知道它正在收听来自this.model的事件。

所以是的,语法是不同的,但主要的区别是谁知道谁在倾听:与on,只有听到的东西知道有一个监听器;与listenTo,听众也知道他们在听什么。

如果您想停止收听活动,区别很重要。如果您使用的是on,那么您必须保留自己的收听列表,以便您可以off;如果您使用的是listenTo,那么listenTo会跟踪这一点,您可以简单地使用stopListening

例如,View#remove看起来是这样的:

remove: function() { 
    this.$el.remove(); 
    this.stopListening(); 
    return this; 
} 

,所以你可以调用view.remove(),它会自动清理您有任何事件绑定(只要你使用listenTo)和僵尸听众的机会大幅减少。

+0

O!我知道了。感谢您的指导。我在Backbone Home网站本身没有找到这样的细节。 –

+1

@iCyber​​netics:在有'listenTo'方法之前使用Backbone时,'listenTo'的效用更容易被看到。 –

+0

是的!获取了Backbonejs.org提供的Change-log中的所有信息 –