我有8个主视图,在每个主视图中我创建了2,3个子视图;每个主视图都有一个方法" deleteChildViews"用于删除在删除主视图之前调用的子视图。
现在,如果用户经常从一个主视图切换到另一个主视图,那么对于每个主视图,它的" deleteChildViews"方法被称为。
问题
由于每个子子视图都需要AMD,因此初始化并返回其对象需要一些时间。对于此平均时间,分配视图的变量将是未定义的。
每次我们从一个主视图切换到另一个主视图时,都会调用已加载视图的deleteChildViews进行子视图清理,然后启动新视图。由于从一个主视图频繁转换到另一个主视图,当从父(主视图)调用deleteChildViews方法时,发现其子视图未定义,因此函数终止而没有子清理。经过一段时间后,这些儿童观点才会出现,导致僵尸观点不再留下任何参考,以消除这些观点。
我应该使用哪种方法来删除这些僵尸视图?有时它们也会导致唤醒死亡的主要观点。
路由器中的代码,在给定路由初始化特定视图之前调用的函数。
routes: {
main: mainHandler
},
initialize: function () {
$(window).off().on("hashchange", that.remove_previous_view);
},
mainHandler: function () {
// initializing mianView
that.view = new mainView();
},
remove_previous_view = function () {
if (that.view) {
// method called to delete sub-views
that.view.deleteChildViews();
//removing child view itself
that.view.remove();
}
}
mainView中的代码
initialize: function () {
this.render();
},
render: function () {
this.el.html(_.template('mainTemplate'));
this.initiateChildView();
},
initiateChildView: function () {
this.childView = new ChildView();
},
deleteChildViews: function () {
if (this.childView) {
//used to remove childViews inside the child views.
this.childView.deleteChildViews();
this.childView.remove();
}
}