如何通过按 id 注册但未在任何 DOM 节点中引用来删除 dojo 小部件
How to remove dojo widgets by registered by id, but not referenced in any DOM node
>上下文:我正在开发一个应用程序,该应用程序现已转换为单页应用程序。应用程序中有许多小部件,其中许多已被分配了 id,因此在需要时可以轻松获取它们。当我们在应用程序内部导航时,domNode 被domConstruct.empty(this.someNode)
清除,新的 DOM 被放置在其中。
这里发生的问题是,尽管 DOM 被清除,但小部件仍然由相同的 id 注册,当我们再次导航到该页面时,它什么也没显示。(甚至没有例外。在Chrome,Firefox,IE中尝试过(
它以前工作正常,因为在导航过程中,每次打开带有新链接的新页面时,因此没有与 id 相关的问题。
那么,如何删除由 id 注册但未被任何 domNode 引用的小部件?
PS:我知道问题与小部件的 id 有关,因为当我只注册一个带有 id 的小部件时,它是第一次注册的,但是当我在调试时再次导航到那里时,在那一步,小部件没有注册,也没有例外。
编辑1:使用this.own((是解决方案吗?
从表面上看,您正在寻找dijit/registry.findWidgets
:
require([ 'dojo/_base/array', 'dojo/dom-construct', 'dijit/registry' ], function (arrayUtil, domConstruct, registry) {
arrayUtil.forEach(registry.findWidgets(this.someNode), function (widget) {
widget.destroyRecursive();
});
domConstruct.empty(this.someNode);
});
如果您通常处理经常需要清除或刷新的自由格式内容区域,则可能需要查看dijit/layout/ContentPane
。
相关文章:
- 如何引用HTML中节点模块中的js文件
- 节点.js V8 通过引用传递
- 如何保持所选元素's节点的值(而不是引用)
- appendChild上的错误-试图在不存在节点的上下文中引用该节点
- 创建服务器并在节点.js服务器 (EdgeJS) 中引用 API
- 如何引用对象中的其他节点
- 不包含块引用的节点的查询选择器
- 如何获取对 JS中 ::before 或 ::after 节点的引用
- 节点引用包含的帮助程序类上的错误
- 未捕获的 NotFoundError:尝试在不存在的上下文中引用节点
- 为什么以及如何jQuery的“$(this)”引用正确的节点
- 节点网络套件引用错误
- 未捕获的引用错误:未定义要求 - 节点.js
- 如何通过按 id 注册但未在任何 DOM 节点中引用来删除 dojo 小部件
- 使用 EJS 部分和角度的节点/快速项目:未捕获的引用错误:未定义角度
- 不允许在 Angular 表达式中引用 DOM 节点
- 获取循环中引用的子节点的水平偏移位置
- 保留对dom节点的引用:内存问题
- Javascript构建元素引用节点列表
- 如何在html内正确引用节点脚本模块