gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:40:29 24 4
gpt4 key购买 nike

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

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

如果没有,那么我怎样才能达到同样的目的?我不想在创建期间检查具有相同 id 的小部件并销毁它(如果存在)。

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

最佳答案

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

关于javascript - dojo.empty()/domConstruct.empty() 到底做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com