繁体   English   中英

在Backbone.JS中回收视图

[英]Recycling views in Backbone.JS

我在Backbone应用程序上工作,它使用了很多视图。 我陷入了(通常我认为)实例化路由器(一种类型,主控制器)的陷阱,它负责清除视图,实例化新视图,并用数据填充它们。 我说陷阱,因为尽管JavaScript有一个内置的垃圾收集器,但人们会很快开始注意到应用程序的可用性如何受到仍然驻留在内存中的许多未使用的视图的阻碍。

我希望有办法回收这些意见。 我认为这就像使用新模型在视图上调用initialize()然后重新渲染一样容易。 不幸的是,这并不容易。

此外,人们必须有点“破坏”视图句柄,例如,事件处理程序和东西......

什么是这样做的好习惯?

DOM删除视图后,将对其进行垃圾回收。 除非您当然将其缓存。 如果您确实缓存了一个视图并将其从DOM删除,那么所有事件处理程序也会被垃圾收集。 除非您使用类似jQuery的detach方法的方法,否则它将保留事件处理程序。

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

如果要回收视图,只需将其缓存在变量中。

router的init方法中,执行以下操作:

this.views = {};

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

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
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM