У меня странная проблема, когда метод onDestroy() моего ItemView никогда не запускается. Я использую Marionette v 2.2.1. Вот очень упрощенная версия того, что у меня есть.Backbone.js - Marionette ItemView onDestroy() никогда не назывался
myItemView.js
-------------
initialize: function() {
console.log('ItemView init');
var self = this;
this.listenTo(eventsModel, 'change', function(){
console.log('changed, lets do something');
self.doSomething();
});
this.listenTo(eventsModel, 'destroy', function(){
console.log('lets destroy ourselves');
self.destroy();
});
}
onDestroy: function() {
console.log('hurray, destroyed!');
this.stopListening();
}
doSomething: function() {
console.log('doing something');
}
myController.js
---------------
var myView = new myItemView({model: aModel})
eventsModel.trigger('change');
eventsModel.trigger('destroy');
output:
//ItemView init
//changed, lets do something
//doing something
//lets destroy ourselves
Как вы можете видеть onDestroy() никогда не срабатывает ... что мне не хватает?
Это та же проблема. Также представления реализуют метод onClose. Не проверял это, но я уверен, что этот метод также срабатывает, когда вы вызываете region.close(); Afaik, вам не нужно запускать явное событие уничтожения через модель. – Trace
Триггер destroy фактически представляет собой кнопку «закрыть» в приложении. У нас есть менеджер событий, отслеживающий все события, связанные с триггером, с помощью Radio. По сути, когда пользователь закрывает его, я хочу уничтожить все. Кажется, что у регионов нет близкого метода. Я довольно новичок в позвоночнике, но мне кажется, что я нахожусь в мусорной коллекции. Я не совсем понимаю, что я должен/не должен, может/не могу называть destroy on ... или он близок ...? – gjunkie
Просто для этого вы можете добавить обратный вызов 'onBeforeDestroy'? Btw, события, обрабатываемые с помощью 'this.listenTo', автоматически отключаются при уничтожении представления, см. Https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.view.md#view-destroy. – seebiscuit