何时在使用复杂模型结构时调用Backbone.Relational.store.unregister()

时间:2012-07-03 07:48:23

标签: memory-leaks backbone.js backbone-relational

我有一个使用Backbone Relation的应用程序构建,它像疯了一样泄漏内存。据我所知,这是因为我从不在我的模型上调用Backbone.Relational.store.unregister(),导致它们永远存在于商店中。

数据模型相当深,有很多相互关联的类,我或多或少地不断地获取匹配变化过滤器的模型树。然而,个别模型的所有权并不清楚,因为它们可能也被应用程序的其他部分使用,而不是最初获取它们的部分。

我应该何时取消注册模型?在阅读Backbone Relational的源代码后,我可以看到unregister()在'destroy'上被调用,但是因为我永远不会删除那些不行的模型。

1 个答案:

答案 0 :(得分:4)

您可能应该更多地描述您的设置。一般来说,您如何管理和访问模型?你有应用程序范围的单件集合吗?

我们通过将取消注册绑定到集合的remove事件来解决此问题。如果效果那么,模型只是它们是集合的一部分时的关系。从集合中移除模型后,将其丢弃。这可能适用于您,也可能不适用,具体取决于您的应用程序架构。

旁注:我已经放弃了Backbone.Relational,因为根据我的经验,这是非常危险的。当你开始使用它时,它就像一个魅力,但它很容易拍摄自己的脸。就像你似乎有的那样。而且因为它的设计鼓励你将它与应用程序代码的每个方面紧密地结合在一起,所以摆脱它可能非常困难。