1

我正在使用 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)如果没有,有没有办法让我参考所有的观点?这样我就可以在程序代码中手动释放或删除它们?

谢谢

4

1 回答 1

4

1) 不,您的视图和相关事件仍将存在。你只是不会再“看到”它了。

2) Derick Bailey对处理视图和页面转换有很好的解释。在他的网站上概述的方法很容易遵循,并且解释得很好。

回应ming yeow的评论:

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

无需清理。当您调用$('#someTag').html(newView.render().el)时,(previous 和 present)(视图和事件)仍然绑定到#sometag元素。

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

于 2013-01-05T03:16:30.780 回答