我正在尝试了解他们在Backbone 0.9.9中所做的新变化。
目前我无法理解listenTo
和on
之间的区别:
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
取消订阅所有事件,例如删除视图以避免内存泄漏。
这是唯一的原因吗?
答案 0 :(得分:53)
创建视图时,listenTo
和on
都会添加事件处理。但是,当视图被销毁时,listenTo
调用将automatically remove the event handler。这个prevents memory leaks和僵尸事件监听器。
因此,如果您想自己管理处理程序,请使用on
。请务必致电off
。否则,请致电listenTo
。
答案 1 :(得分:40)
listenTo
和stopListening
来自社区。它们有助于更容易绑定和取消绑定事件。
有很多关于这个想法的现有文档和博客文章,包括我在这个主题上写的东西。
Johnny Oshika是我第一个使用这种技术的人。它最初是作为StackOverflow问题的答案发布的:Backbone.js : repopulate or recreate the view?
你可以在这里阅读我所写的内容: