Backbone 0.9.9:listenTo和on之间的区别

bod*_*ser 55 javascript events backbone.js backbone-events

我试图了解他们在Backbone 0.9.9中所做的新变化.

目前,我有问题理解之间的区别listenToon:

listenTo

var View = Backbone.View.extend({

    tagName: "div",

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

    render: function() {
        this.$el.empty();
        this.$el.append('<p>hello world</p>');
    }

});
Run Code Online (Sandbox Code Playgroud)

var View = Backbone.View.extend({

    tagName: "div",

    intialize: function() {
        this.model.on('change', this.render, this);
    },

    render: function() {
        this.$el.empty();
        this.$el.append('<p>hello world</p>');
    }

});
Run Code Online (Sandbox Code Playgroud)

我听说listenTo允许stopListening取消订阅所有事件,例如删除视图以避免内存泄漏.

这是唯一的原因吗?

Ric*_*ard 53

当你创建一个视图,都listenToon添加事件处理.但是,当视图被销毁时,listenTo调用将自动删除事件处理程序.这可以防止内存泄漏和僵尸事件侦听器.

因此,on如果您想自己管理处理程序,请使用.请务必致电off.否则,打电话listenTo.


Der*_*ley 40

listenTostopListening来自社会,基本上是这样.它们有助于更轻松地绑定和取消绑定事件.

关于这个想法有很多现有的文档和博客文章,包括我在这个主题上写的东西.

Johnny Oshika是我看到使用这种技术的第一个人.它最初是作为StackOverflow问题的答案发布的:Backbone.js:重新填充或重新创建视图?

你可以在这里阅读我写的关于这个的内容:

  • 这是一个很好的问题,有一个更直接的答案是好的 (12认同)
  • 看到这个,更近期的帖子:http://lostechies.com/derickbailey/2013/02/06/managing-events-as-relationships-not-just-references/ (3认同)