У меня проблема в приложении Магистральной магии, где мои детские взгляды не уничтожаются полностью. Как правильно уничтожить вложенное представление макета, которое вы заменяете другим видом макета/элемента?Магистраль макинтоша - вид макета Зомби
У меня было впечатление от Marionette documentation on destroying layout views, что, когда я устанавливаю область для отображения нового вида, старый вид уничтожается. Однако события, которые запускаются через vent, по-прежнему видны по старой видимости, которая якобы была уничтожена.
Я создал образец этого вопроса здесь: https://jsfiddle.net/dhardin/5j3x2unx/
Я считаю, что проблема связана с маршрутизатором:
App.Router = Marionette.AppRouter.extend({
routes: {
'': 'showView1',
'view1': 'showView1',
'view2': 'showView2'
},
showView1: function() {
var view1 = new App.View1();
App.Layout.mainRegion.empty();
App.Layout.mainRegion.show(view1);
},
showView2: function() {
var view2 = new App.View2();
App.Layout.mainRegion.empty();
App.Layout.mainRegion.show(view2);
}
});
App.Layout.mainRegion.empty() не требуется мое понимание, как об этом заботится, когда вид разрушен в Менеджер регионаshow() функция. Чтобы увидеть эту проблему, перейдите к другому виду с помощью навигации и нажмите кнопку. Вы увидите, что предупреждение запускается как для старого вида, так и для нового представления.
В моих приложениях до марионетки я следил за рисунком очистки, чтобы избежать этих утечек памяти, обсуждавшихся here.
По сути, мой вид отображения будет вызвать следующую функцию, когда мое приложение меняется на новый вид:
Backbone.View.prototype.close = function(){
this.remove();
this.unbind();
}
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо!
Ах, очень хорошо. Похоже, я не проходил в контексте, поэтому все прослушиватели событий для «ButtonClicked» были удалены. Спасибо за помощь! :) – Dustin