gpt4 book ai didi

javascript - 在 Backbone.JS 中回收 View

转载 作者:行者123 更新时间:2023-11-30 13:23:53 26 4
gpt4 key购买 nike

我在开发一个 Backbone 应用程序,它使用了很多 View 。我陷入了(通常我认为)实例化路由器(有点像主 Controller )的陷阱,它负责清除 View 、实例化新 View 并用数据填充它们。我说陷阱,因为虽然 JavaScript 有一个内置的垃圾收集器,但人们会很快开始注意到应用程序的可用性如何受到许多仍驻留在内存中某处的未使用 View 的阻碍。

我希望有一种方法可以回收这些 View 。我认为这就像使用新模型在 View 上调用 initialize() 然后重新渲染一样简单。不幸的是,这并不容易。

此外,还必须“破坏” View 句柄,例如事件处理程序和其他东西...

执行此操作的最佳做​​法是什么?

最佳答案

一旦 View 从 DOM 中移除,它将被垃圾回收。当然除非你缓存它。如果您缓存 View 并将其从 DOM 中删除,所有事件处理程序也会被垃圾回收。除非你使用类似 jQuery 的 detach 方法,它会保留事件处理程序。

http://api.jquery.com/detach/

如果要回收 View ,只需将其缓存在变量中即可。

在您的router 的 init 方法中,执行如下操作:

this.views = {};

然后每当调用路由时,检查 View 的名称是否在缓存中可用,如果是,则使用它,否则创建一个新的。

someRoute: function () {
var view;
if ( _.has(this.views, 'someRouteView') ) {
view = this.views.someRouteView;
} else {
view = new SomeRouteView;
this.views.someRouteView = view;
}
// You have a view now
}

同样,如果您不创建新 View ,则必须使用类似 jQuery 的 detach 方法来保留事件处理。

关于javascript - 在 Backbone.JS 中回收 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com