当日期文本框元素和ContentPane一起使用时,Dojo错误

时间:2011-03-03 12:09:32

标签: javascript zend-framework dojo

我使用dojo标签容器和内容窗格在我的应用的所有页面中设置搜索对话框。但它给出了一个错误“尝试注册具有id == globsearchpkg的小部件,但该ID已经注册”在那些具有dojo日期文本框以及选项卡容器的页面中。我使用Zend_Dojo_Form_Element_DateTextBox来创建日期文本框。我为tabcontainer使用以下代码:

<div id="globalsearchdialogue" dojoType="dijit.Dialog" title="Global Search" style="display:none" >
<div dojoType="dijit.layout.TabContainer" style="width: 500px; height: 200px;" id="globsearchtabs">


    <div dojoType="dijit.layout.ContentPane" title="Search Packages" id="globsearchpkg"> 
      //First form here
    </div>

    <div dojoType="dijit.layout.ContentPane" title="Search Books" id="globsearchbook"> 
     //Second form here
    </div>
</div>

当我从出现错误的页面中删除日期文本框时,它可以正常工作。如果我删除两个dijit.layout.ContentPanes,它工作正常。即使出现此错误,选项卡容器和日期文本框也能正常工作。问题是,一旦出现此错误,其他组件(如上下文菜单)将无法正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这意味着您不止一次添加小部件,或者只添加一次小部件,只在DOM中删除 ,然后尝试重新添加。

如果您真的希望在页面上多次使用该窗口小部件,则每个实例必须具有不同的ID(ID是唯一的)

如果您只想在页面上同时使用一个实例,是否从页面中删除了搜索对话框,然后尝试稍后重新加入?

如果是这样,您可能是通过致电parentNode.innerHTML = '';或使用dojo.empty(parentNode)或类似内容将其删除的?相反,你应该打电话给dijit.byId('globalsearchdialogue').destroyRecursive()

该调用将破坏与窗口小部件关联的DOM节点,并清理JS代码。请记住,dijits是HTML和Javascript代码的组合,因此您必须正确清理这两个部分!