Backbone 0.9.9:listenTo 和 on 之间的区别

IT技术 javascript events backbone.js backbone-events
2021-03-18 18:23:32

我正在尝试学习他们在 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取消订阅所有事件。

这是唯一的原因吗?

2个回答

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

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

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

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

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

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

这是一个很好的问题,如果能有一个更直接的答案就好了
2021-04-22 18:23:32
我也在学习这个,所以这对我来说是一个及时的问题。现在推荐的做法是使用 listenTo 绑定在应用程序生命周期中某个时刻可能需要解除绑定的所有事件吗?
2021-05-02 18:23:32
@ErichBSchulz 同意,虽然在 hs 发表的 3 篇博文中没有提到 listenTo,但我猜@DerickBailey 说是的,使用listenToover on
2021-05-09 18:23:32
看到这个,最近的帖子:losechies.com/derickbailey/2013/02/06/...
2021-05-16 18:23:32