我一直在阅读有关 Backbone.js 僵尸(或内存泄漏)问题的信息。基本上,当您不再需要该元素时,您必须解除绑定(bind)并从 DOM 中移除该元素,以确保所有事件也都被移除。
现在,我有一个带有几个容器的单页应用程序:
<div id="page1"></div>
<div id="page2"></div>
并将我的 underscore.js 模板添加到这些占位符。我每页都有一个模型,例如:
HomeView = Backbone.View.extend({
el: '#page1'
)}
现在,当我单击该页面上的一个元素时,我会导航到另一个 Backbone.js View :
clicked: function(ev){
$(this.el).remove(); // <-- this is the problem
$(this.el).unbind();
App.navigate('page/2', true);
}
这工作正常但是...我从 DOM 中删除了 page1
元素,所以当我使用后退按钮转到上一页时,我的元素消失了,没有任何东西可以附加 HTML到。
我可能不明白如何将 Backbone.js View 与 DOM 链接起来……我是否应该让元素冒着内存泄漏的风险?
谢谢!
最佳答案
关于在您的页面中丢失 page1 元素并因此无法使用 HTML 填充该项目,我执行了以下操作。
而不是使用:
this.remove();
...完全删除元素,然后尝试弄清楚如何将其添加回来,我使用 jQuery 的:
$(this).empty;
这会清空所有子元素、文本、数据和事件处理程序。更多信息:http://api.jquery.com/empty/
事实上,我使用了以下所有内容,这可能有点矫枉过正,但我们拭目以待:
this.undelegateEvents();
$(this).empty;
this.unbind();
希望这有用!
关于javascript - Backbone View DOM 元素已删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482488/