内存管理使用Backbone.js - 如何引用当前视图

时间:2013-01-05 02:47:46

标签: memory-management view backbone.js reference

我正在使用Backbone.js来构建我当前的应用程序。

作为一种通过路线导航的方式,我将替换html中的新页面视图,如下所示

//When new route is called, a new view is created and the html is replaced with the new view
view = new Onethingaday.View.NewView()
$(".main_content_container").html view.render().el

我在网上发现,如果我们使用骨干,我们必须进行内存管理,如本文所述https://paydirtapp.com/blog/backbone-in-practice-memory-management-and-event-bindings/

我的问题是

1)将当前视图完全释放,只需用新视图替换它(通过$(“。main_content_container”)。html view.render()。el)?

2)如果没有,有没有办法让我参考所有观点?这样我就能在程序代码中手动释放或删除它们?

由于

1 个答案:

答案 0 :(得分:4)

1)不,您的观点和相关事件仍然存在。你不会再“看到”它了。

2)Derick Bailey在处理视图和页面转换方面有出色的explanation。他网站上概述的方法很容易理解,并得到了很好的解释。

回应ye ye yeow的评论:

简短的回答是:视图仍然存在,因为它仍然附加到DOM元素。使用$('#someTag').html(newView.render().el)重写该元素的内容与在元素上调用oldView.remove()oldView.unbind()不同。

没有清理。当您致电$('#someTag').html(newView.render().el)时,(之前和现在)(视图和事件)仍然绑定到#sometag元素。

这就是为什么当一个新的视图被渲染时(假设没有清理)$('#someTag').html(newView.render().el),如果你去一个视图,另一个视图,另一个视图,等等......你将...将多个事件和视图附加到一个元素。