javascript-骨干0.9.9:listenTo和on之间的区别

我正在尝试学习他们在Backbone 0.9.9中所做的新更改。

目前,我在理解listenTostopListening之间的区别时遇到问题:

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>');
    }

});

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>');
    }

});

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

这是唯一原因吗?

2个解决方案
53 votes

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

因此,如果您想自己管理处理程序,请使用on。 只需确保致电off,否则请致电listenTo

Richard answered 2019-11-18T21:47:12Z
40 votes

listenTostopListening基本上来自社区。 它们有助于使绑定和取消绑定事件更加容易。

关于这个想法有很多现有的文档和博客文章,其中包括我就该主题编写的内容。

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

您可以在这里阅读我所写的内容:

  • Backbone.EventBinder:为您的骨干应用程序提供更好的事件管理
  • 僵尸! 跑! (管理骨干应用程序中的页面转换)
  • Backbone.js和JavaScript垃圾回收
Derick Bailey answered 2019-11-18T21:46:40Z
translate from https://stackoverflow.com:/questions/14041042/backbone-0-9-9-difference-between-listento-and-on