В настоящее время я пытаюсь реализовать метод уничтожения / удаления для представлений, но я не могу найти универсальное решение, работающее для всех моих представлений.
Я надеялся, что к контроллеру будет привязано событие, чтобы при поступлении нового запроса он уничтожал предыдущие представления, а затем загружал новые.
Есть ли способ сделать это без создания функции удаления для каждого представления?
javascript
javascript-events
backbone.js
Эд Тейлор
источник
источник
Ответы:
Не зная всей информации ... Вы можете привязать триггер сброса к вашей модели или контроллеру:
this.bind("reset", this.updateView);
и когда вы хотите сбросить представления, запустите сброс.
Для обратного вызова сделайте что-нибудь вроде:
updateView: function() { view.remove(); view.render(); };
источник
this.remove()
звонкиthis.stopListening()
иthis.$el.remove()
. Первый удаляет все прослушиватели событий, добавленные с помощьюthis.listenTo(...)
. Второй удаляет все прослушиватели событий, добавленные с помощью jQuery. Между этими двумя вы должны быть охвачены, если вы не использовали какие-либо другие средства добавления прослушивателей событий. Так что это правильный ответ, и я получил +1.Я должен был быть абсолютно уверен, что представление было не только удалено из DOM, но и полностью не привязано к событиям.
destroy_view: function() { // COMPLETELY UNBIND THE VIEW this.undelegateEvents(); this.$el.removeData().unbind(); // Remove view from DOM this.remove(); Backbone.View.prototype.remove.call(this); }
Мне это показалось излишним, но другие подходы не помогли полностью.
источник
this.$el
вместо$(this.el)
;)this.remove()
?Я знаю, что опаздываю на вечеринку, но, надеюсь, это будет полезно для кого-то еще. Если вы используете backbone v0.9.9 +, вы можете использовать
listenTo
иstopListening
initialize: function () { this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); }
stopListening
вызывается автоматически пользователемremove
. Вы можете прочитать здесь и здесьисточник
Это то, что я использовал. Проблем не замечено.
destroy: function(){ this.remove(); this.unbind(); }
источник
Согласно текущей документации Backbone ....
view.remove ()
Удаляет представление и его el из DOM и вызывает stopListening для удаления любых связанных событий, которые у представления есть listenTo'd.
источник
Я думаю это должно сработать
destroyView : function () { this.$el.remove(); }
источник
this.stopListening()
а потом иreturn this
для хорошей мерыВы можете использовать способ решить проблему!
initialize:function(){ this.trigger('remove-compnents-cart'); var _this = this; Backbone.View.prototype.on('remove-compnents-cart',function(){ //Backbone.View.prototype.remove; Backbone.View.prototype.off(); _this.undelegateEvents(); }) }
Другой способ : Создайте глобальную переменную, например:
_global.routerList
initialize:function(){ this.routerName = 'home'; _global.routerList.push(this); } /*remove it in memory*/ for (var i=0;i<_global.routerList.length;i++){ Backbone.View.prototype.remove.call(_global.routerList[i]); }
источник