Я разрабатываю небольшое веб-приложение в backbone.js. В одном представлении я использую метод setInterval для обеспечения некоторого эффекта анимации. Я изменяю атрибут src тега img с интервалом в 3 с путем увеличения переменной index
.Объект зомби не удаляется методом remove() в backbone.js
Проблема заключается в том, что при повторном входе в один и тот же вид индексная переменная увеличивается на менее чем за 3 секунды. Иногда это меньше 1 с.
Перед повторным рендерингом представления я закрываю уже существующий вид следующим кодом, чтобы избежать объекта зомби.
Мой маршрутизатор
SearchPage:
function(data) {
if(!directory.myview){
directory.myview=new directory.SearchView({model:data});
}
else{
directory.myview.close();
directory.myview=new directory.SearchView({model:data});
}
// code to append the rendered view to html page comes here
}
Мой Посмотреть
directory.SearchView = Backbone.View.extend({
render:function() {
this.$el.html(this.template(this.model));
return this;
},
close :function()
{
this.unbind();
this.remove();
delete this.$el;
delete this.el;
}
});
Не могли бы вы показать, где вы используете метод setInterval? – mor
Вам больше не нужна функция 'close', если вы связываете события с' listenTo', 'View # remove' будет делать все необходимое, так как Backbone 0.9.9. Однако, вы фактически остановите метод setInterval перед запуском нового с помощью 'clearInterval'? Если вы этого не сделаете, все равно будет ссылка на удаленное вами представление, и это представление не может быть собрано в мусор. – Loamhoof
спасибо, господин. Loamhoof .. я перепроверял мой код для clearInterval. Проблема была там. Исходная переменная для setInterval была изменена в части приложения. Итак, теперь я правильно установил ссылочную переменную. и рабочий штраф –