我有一个OuterView和一个包含多个ChildView的MainView。对于OuterView中的某些事件,我将关闭当前的MainView(它会在每个ChildView上启动一个关闭函数),然后我将使用不同的ChildView重新渲染一个新的MainView(没有什么能阻止ChildView出现在一个MainView上,然后出现在另一个MainView上 - 将MainView视为稍微不同的查询/过滤器。)
虽然我正在查看MainView,但某些操作/事件可以删除单个ChildView,并调用其关闭功能。它目前的工作方式如下:
1)如果我之前从未见过ChildView(例如,只刷新整个页面,或者同时更改了MainView并看到了ChildView),删除它效果很好
2)如果我之前看过ChildView(例如,在我的OuterView中我转到第1页过滤器,然后转到第2页,然后回到第1页),当我的ChildView上触发remove事件时,它没有&# 39;删除视图/ HTML,即使它通过关闭功能。
我的MainView关闭功能如下所示:
close: function() {
for (var key in this.childViews) {
this.childViews[key].close();
}
this.undelegateEvents();
this.$el.empty();
this.stopListening();
this.remove();
},
My ChildView关闭功能如下所示:
close: function() {
this.$el.empty();
this.stopListening();
this.remove();
}
有人知道为什么我的ChildView如果以前见过那么关闭不好吗? (我猜它第一次没有被删除,所以关闭视图会出问题。)
谢谢, 克里斯
答案 0 :(得分:0)
如果没有看到其余的代码,很难知道,但是如果没有抛出控制台错误,我猜你的子视图没有附加到你认为的DOM元素上。
在您的ChildView关闭方法中,请在清空后尝试添加console.log(this.$el[0])
。如果记录的div
为空,但您的html仍在页面上,则视图可能使用分离的div
,而不是您认为的页面元素。
当您操作的视图可能附加到的DOM元素时,您可以使用setElement确保它们附加在正确的位置。