dojo.empty()/ domConstruct.empty()完全做了什么

时间:2016-02-16 09:11:01

标签: javascript dojo

假设我在someNode中注册了一些带有一些ID的小部件(比如说id1,id2)。现在,如果我这样做domConstruct.empty(someNode),则会通过执行someNodesomeNode.innerHTML= ""删除小部件。但小部件仍在记忆中吗?

我的意思是,在domConstruct.empty(someNode)之后,我能够注册一个id1或id2的小部件吗?

如果没有,那我怎么能达到同样的目的呢?我不想在创建过程中检查具有相同ID的窗口小部件,如果存在则将其销毁。

P.S:我假设dojo.empty()domConstruct.empty()的工作方式相同。

1 个答案:

答案 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来管理子小部件。

相关问题