我最近创建了我认为是基于页面的应用程序,它现在被嵌入作为控件使用. “控制”需要多次卸载/重新加载.这会导致订阅和未被销毁的dijit控件出现问题.我已经找到了必要的断开连接,注
这是示例代码,显示了可以使用基本逻辑完成的任务:
http://pastebin.com/bUUBUMP9
我问的是一个类似于AppDomain的框架是否可以清除在该上下文中创建的任何内容.类似于将控件嵌入IFRAME ……但不是.
我可以看到两种让您的生活更轻松的做法:> Dijit小部件扩展dijit / _WidgetBase,因此小部件提供(dis)连接和(非)订阅方法.在连接小部件时,您应该使用它们而不是通用的aspect.connect()和topic.subscribe(),因为这样小部件在被销毁时会自动断开连接并取消订阅,因此您不必这样做.
>通过dijit / layout组织您的小部件,例如使用dijit / layout / ContentPane而不是将小部件放入DOM,因为这样你只需要在ContentPane上调用destroyRecursive(),它就会正确地销毁它的所有子节点.根据您的需要嵌套容器,以获得适当的粒度和视觉吸引力(这与Java的JPanel的概念相同).
应用上述原则,您可能只需要在层次结构中最高的容器上调用destroyRecursive()来销毁dijits.