如何通过id注册删除dojo小部件,但不在任何DOM节点中引用

时间:2016-02-16 06:21:14

标签: javascript dom dojo

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

这里发生的问题是,虽然清除了DOM,但是小部件仍然由相同的ID注册,当我们再次导航到该页面时,它只显示任何内容。 (甚至没有例外。在Chrome,Firefox,IE中尝试过)

以前工作正常,因为在导航期间,每次使用新链接打开新页面时,都没有与ids相关的问题。

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

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

Edit1:正在使用this.own()这个解决方案吗?

1 个答案:

答案 0 :(得分:2)

从表面看,您正在寻找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