假设我在someNode
中注册了一些带有一些ID的小部件(比如说id1,id2)。现在,如果我这样做domConstruct.empty(someNode)
,则会通过执行someNode
从someNode.innerHTML= ""
删除小部件。但小部件仍在记忆中吗?
我的意思是,在domConstruct.empty(someNode)
之后,我能够注册一个id1或id2的小部件吗?
如果没有,那我怎么能达到同样的目的呢?我不想在创建过程中检查具有相同ID的窗口小部件,如果存在则将其销毁。
P.S:我假设dojo.empty()
和domConstruct.empty()
的工作方式相同。
答案 0 :(得分:1)
dojo/dom-construct
的API对Dijit小部件一无所知,因此当您运行domConstruct.empty(node)
或domConstruct.destroy(node)
时,它无需查找和销毁小部件。 (我explained how to do that处于一个很大程度上相关的问题。)
当创建Dijit小部件时,它们将填充在由dijit/registry
模块维护的散列中,这允许将来通过ID(或节点)访问它们。 dijit/registry.findWidgets
也使用dijit/_WidgetBase#getChildren
(容器和布局小部件又使用它)来根据DOM树检索子窗口小部件。
由于dojo/dom-construct
对Dijit一无所知,它只会破坏给定节点下的所有DOM节点,并且不会更新Dijit的注册表。因此,你最终得到一个不一致的状态,Dijit认为这些小部件仍然存在,但他们的DOM实际上已被破坏。正如在另一个问题中所回答的那样,您应该首先使用findWidgets
来正确销毁小部件,或者考虑使用布局小部件或ContentPane
来管理子小部件。