【问题标题】:Backbone 0.9.9: Difference between listenTo and onBackbone 0.9.9:listenTo 和 on 的区别
【发布时间】:2012-12-26 13:08:48
【问题描述】:

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

目前我很难理解listenToon之间的区别:

收听

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 取消订阅所有事件,例如视图被移除以避免内存泄漏。

这是唯一的原因吗?

【问题讨论】:

标签: javascript events backbone.js backbone-events


【解决方案1】:

创建视图时,listenToon 都会添加事件处理。然而,当视图被销毁时,listenTo 调用将变为automatically remove the event handler。这个prevents memory leaks 和僵尸事件监听器。

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

【讨论】:

    【解决方案2】:

    listenTostopListening 基本上来自社区。它们有助于更轻松地绑定和取消绑定事件。

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

    Johnny Oshika 是我看到的第一个使用这种技术的人。它最初是作为 StackOverflow 问题的答案发布的:Backbone.js : repopulate or recreate the view?

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

    【讨论】:

    • 我也只是在学习这个,所以这对我来说是一个及时的问题。现在推荐的做法是使用 listenTo 来绑定在应用程序生命周期中的某个时间点可能需要解除绑定的所有事件吗?
    • 这是一个很好的问题,如果有一个更直接的答案会很好
    • @ErichBSchulz 同意了,虽然 hs 发表的 3 篇博文中没有提到 listenTo,但我猜 @DerickBailey 说是的,使用 listenTo 而不是 on
    • 看到这个,最近的帖子:lostechies.com/derickbailey/2013/02/06/…
    猜你喜欢
    • 2013-02-14
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多