javascript - Backbone View DOM 元素已删除

标签 javascript dom backbone.js rendering

我一直在阅读有关 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/

相关文章:

javascript - Asterisk 在 Android 中静音,但在 PC 上可以使用

Javascript 如何将 Base 64 url​​ 转换为文件?

javascript - 为什么选择 DOM 元素时使用常量变量?

javascript - 如何延迟更改&lt;title&gt;?

backbone.js - marionette.js中的全局错误处理

javascript - PHP session /json/javascript

javascript - 单击按钮时有条件渲染 3 个组件中的 1 个( react )

javascript - 使用 JavaScript 的 HTMLCollection 更改事件

javascript - 在 backbone.js 中触发任一事件但不会同时触发

javascript - Marionette 嵌套 CompositeView 在 CompositeView 事件触发/冒泡中