dojo.empty() / domConstruct.empty() 到底做什么

What does dojo.empty() / domConstruct.empty() do exactly

假设我在 someNode 中注册了一些具有某些 ID(比如 id1、id2)的小部件。现在,如果我这样做,domConstruct.empty(someNode),这将通过执行 someNode.innerHTML= ""someNode 中删除小部件。但是这些小部件还在内存中吗?

我想说的是,在domConstruct.empty(someNode)之后,我可以用id1或id2注册一个widget吗?

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

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

dojo/dom-construct 的 API 对 Dijit 小部件一无所知,因此当您 运行 domConstruct.empty(node)domConstruct.destroy(node) 时,它不会查找和销毁小部件. (我 在很大程度上相关的问题。)

创建 Dijit 小部件时,它们会填充到由 dijit/registry 模块维护的散列中,这允许它们在将来通过 ID(或节点)访问。 dijit/registry.findWidgets 也被 dijit/_WidgetBase#getChildren 使用(它又被容器和布局小部件使用)根据 DOM 树检索子小部件。

由于 dojo/dom-construct 对 Dijit 一无所知,它只是销毁给定节点下的所有 DOM 节点,并且不更新 Dijit 的注册表。因此,您最终会遇到不一致的状态,Dijit 认为这些小部件仍然存在,但它们的 DOM 实际上已被销毁。正如在另一个问题中回答的那样,您应该先使用 findWidgets 正确销毁小部件,或者考虑使用布局小部件或 ContentPane 为您管理子小部件。