我最近创建了我认为是基于页面的应用程序,现在将其用作控件嵌入。 “控件”需要多次卸载/重新加载。这导致未破坏的订阅和dijit控件出现问题。我已经计算出必要的断开连接,registry.destroy逻辑,但这很乏味。是否有使控件集合可销毁的最佳实践?
以下示例代码显示了基本逻辑可以完成的工作:
http://pastebin.com/bUUBUMP9
我要问的是,是否存在类似于AppDomain的框架,在该框架中可以清除在该上下文中创建的任何内容。类似于将控件嵌入到IFRAME中...但是不是。
最佳答案
我可以看到两种做法可以使您的生活更轻松:
dijit/_WidgetBase
,因此,一个小部件提供了(dis)connect
和(un)subscribe
方法。接线小部件时,应使用它们而不是通用的aspect.connect()
和topic.subscribe()
,因为这样一来,小部件在被破坏时会自动断开连接并取消订阅,因此您不必这样做。 dijit/layout
整理小部件,例如使用dijit/layout/ContentPane
而不是仅将小部件放置在DOM中,因为这样您就需要仅在destroyRecursive()
上调用ContentPane
,它将适本地破坏其所有子项。根据您的需要嵌套容器,以实现适当的粒度和视觉吸引力(与Java的JPanel
相同的概念)。 应用上述原理,您可能只需要在层次结构中最高的容器上调用
destroyRecursive()
即可销毁dijit。关于Dojo垃圾收集/资源释放技术?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10355559/