我的Backbone Marionette应用程序中存在问题,我的子视图未完全销毁。你如何正确地销毁你用另一个布局/项目视图替换的嵌套布局视图?Backbone Marionette - 布局查看僵尸
我在Marionette documentation on destroying layout views的印象下,当我设置一个区域来显示一个新视图时,旧视图被破坏。但是,通过排气口触发的事件仍然可以被旧的视图看到,而这个旧视图据说已被销毁。
我创造了这个问题,在这里的一个示例: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