通过listenTo跟踪骨干事件

时间:2013-06-20 04:07:59

标签: backbone.js backbone-events

我已经开始使用Backbone了。

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

我没听到这句话试图说的话。好吧,我只能看到.on和.listenTo之间的区别是关于语法。

1 个答案:

答案 0 :(得分:5)

考虑两个电话:

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

在第一种情况下:

  1. this.model知道某人正在倾听'change'事件但却不知道是谁。
  2. this除非您明确跟踪您所做的on来电,否则不知道它在听什么。
  3. 在第二种情况下:

    1. this.model知道某人正在倾听'change'事件但却不知道是谁。
    2. this知道它正在收听来自this.model的事件。
    3. 所以是的,语法是不同的,但主要区别在于谁知道谁在听:使用on,只有被监听的事物知道有一个监听器;使用listenTo,听众也知道他们正在听什么。

      如果您想停止收听活动,差异很重要。如果你正在使用on,那么你必须保留自己所听的内容列表,以便off他们;如果您使用的是listenTo,那么listenTo会对此进行跟踪,您只需stopListening

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

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

      所以你可以调用view.remove()它会自动清理你拥有的任何事件绑定(只要你使用listenTo)并且僵尸听众的几率大大减少。