55

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

listenTo目前我在理解和之间的区别时遇到了问题on

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取消订阅所有事件。

这是唯一的原因吗?

4

2 回答 2

53

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

因此,on如果您想自己管理处理程序,请使用。只要确保打电话off。否则,调用listenTo.

于 2013-07-02T13:30:48.983 回答
40

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

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

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

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

于 2012-12-26T15:32:33.500 回答