开放的编程资料库

当前位置:我爱分享网 > PHP教程 > 正文

递归销毁 Dojo ContentPanes

我最近遇到了Dojo的ContentPanes问题。我将它们与TabContainer一起使用,并使它们可关闭;但是,用户操作可能会重新打开从同一来源拉取的选项卡。这导致与我必须解决的dijitID发生冲突。

大多数Dijit都有一个destroyRecursive()方法,理论上应该可以销毁其中包含的任何dijit。然而,对于许多Dijit,由于其实现方式,此功能根本不起作用;许多人实际上对它们下面的dijit一无所知。

ContentPanes属于后一类。幸运的是,由于Dojo高度面向对象的特性,它相对容易实现。

dojo.provide(\"custom.ContentPane\");

dojo.require(\"dijit.layout.ContentPane\");

dojo.declare(\"custom.ContentPane\", [dijit.layout.ContentPane], {
    postMixInProperties: function(){
        if (dijit.byId(this.id)) {
            dijit.byId(this.id).destroyRecursive();
        }
    },

    destroyRecursive: function(){
        dojo.forEach(this.getDescendants(), function(widget){
            widget.destroyRecursive();
        });
        this.inherited(arguments);
    }
});

destroyRecursive()方法与dijit._Widget中的方法没有什么不同;不同之处在于,我们不是在任何发现的小部件上简单地调用destroy(),而是递归地销毁。

由于我遇到的IE问题,我添加了postMixInProperties方法。基本上,即使ContentPane被递归销毁,出于某种原因,IE仍保留对原始dijit的引用。postMixInProperties()检查dijitID是否仍然存在,如果存在,则递归销毁它。这允许继续进行ContentPane初始化。

未经允许不得转载:我爱分享网 » 递归销毁 Dojo ContentPanes

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏