Backbone 0.9.9:listenTo和on之间的区别

时间:2012-12-26 13:08:48

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

});

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 个答案:

答案 0 :(得分:53)

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

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

答案 1 :(得分:40)

基本上,

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

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

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

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