我最近创建了我认为是基于页面的应用程序,它现在被嵌入作为控件使用."控制"需要多次卸载/重新加载.这会导致订阅和未被销毁的dijit控件出现问题.我已经找到了必要的断开连接,注册表.detroy逻辑,但它很乏味.是否有任何最佳实践可以使控件集合可以破坏?
下面的示例代码显示了可以使用基本逻辑完成的任务: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。