Javascript 如何通过id注册而不是在任何DOM节点中引用来删除dojo小部件

Javascript 如何通过id注册而不是在任何DOM节点中引用来删除dojo小部件,javascript,dom,dojo,Javascript,Dom,Dojo,上下文:我正在开发一个应用程序,该应用程序现在已转换为单页应用程序。应用程序中有很多小部件,其中很多都被分配了id,因此在需要时很容易获得它们。当我们在应用程序内部导航时,domNode被domConstruct.empty(this.someNode)清除,新的DOM被放置在其中 这里出现的问题是,虽然DOM被清除,但是小部件仍然由相同的ID注册,当我们再次导航到该页面时,它什么也没有显示。(甚至没有例外。在Chrome、Firefox、IE中试用过) 以前它工作得很好,因为在导航过程中,每次

上下文:我正在开发一个应用程序,该应用程序现在已转换为单页应用程序。应用程序中有很多小部件,其中很多都被分配了id,因此在需要时很容易获得它们。当我们在应用程序内部导航时,domNode被
domConstruct.empty(this.someNode)
清除,新的DOM被放置在其中

这里出现的问题是,虽然DOM被清除,但是小部件仍然由相同的ID注册,当我们再次导航到该页面时,它什么也没有显示。(甚至没有例外。在Chrome、Firefox、IE中试用过)

以前它工作得很好,因为在导航过程中,每次打开一个带有新链接的新页面时,都不会出现与ID相关的问题

那么,如何删除由ids注册但未被任何domNode引用的小部件呢

注:我知道这个问题与小部件的id有关,因为当我只注册了一个带有id的小部件时,它是第一次注册的,但是当我在调试时再次导航到那里时,在那一步,小部件没有注册,也没有例外


Edit1:使用this.own()是解决此问题的方法吗?

从表面上看,您正在寻找:


如果您通常处理的是经常需要清除或刷新的自由格式内容区域,您可能需要查看。

接下来,这是否还会删除在
dojox/dtl/\u模板中声明性实例化的小部件?
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);
});