假设我在id1中用一些id2注册了一些小部件(比如id2、someNode )。现在,如果我这样做了,domConstruct.empty(someNode),这将通过执行someNode.innerHTML= ""从someNode中删除小部件。但是这些小部件还在内存中吗?
我想说的是,在domConstruct.empty(someNode)之后,我能在id1或id2中注册一个小部件吗?
如果没有,那我又如何达到同样的目标呢?我不想检查小部件在创建过程中是否具有相同的id,如果它存在,则销毁它。
P.S:我假设dojo.empty()和domConstruct.empty()的工作方式是相同的。
发布于 2016-02-16 13:25:58
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来为您管理子部件。
https://stackoverflow.com/questions/35428202
复制相似问题