Backbone 0.9.9: Разница между listenTo и on
Я пытаюсь изучить новые изменения, которые они сделали в 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
отказаться от подписки на все события, когда, например, удаляется вид, чтобы избежать утечек памяти.
Это единственная причина?
Ответы
Ответ 1
listenTo
и stopListening
пришли из сообщества, в основном. Они помогают упростить привязку и отключение событий.
Там есть много существующих документов и сообщений в блогах, связанных с этой идеей, включая материалы, которые я написал по этому вопросу.
Джонни Ошика - первый человек, которого я видел с помощью этой техники. Первоначально он был отправлен как ответ на вопрос StackOverflow: Backbone.js: повторить или воссоздать представление?
Вы можете прочитать, что я написал об этом, здесь:
Ответ 2
Когда вы создаете представление, listenTo
и on
добавляют обработку событий. Однако, когда представление уничтожено, вызов listenTo
автоматически удалит обработчик событий. Это предотвращает утечку памяти и прослушиватели событий в зомби.
Итак, используйте on
, если вы хотите самостоятельно управлять обработчиком. Обязательно позвоните off
. В противном случае вызовите listenTo
.