我最近创建了我认为是基于页面的应用程序,现在将其用作控件嵌入。 “控件”需要多次卸载/重新加载。这导致未破坏的订阅和dijit控件出现问题。我已经计算出必要的断开连接,registry.destroy逻辑,但这很乏味。是否有使控件集合可销毁的最佳实践?

以下示例代码显示了基本逻辑可以完成的工作:
http://pastebin.com/bUUBUMP9

我要问的是,是否存在类似于AppDomain的框架,在该框架中可以清除在该上下文中创建的任何内容。类似于将控件嵌入到IFRAME中...但是不是。

最佳答案

我可以看到两种做法可以使您的生活更轻松:

  • Dijit小部件扩展了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/

    10-15 12:46