【问题标题】:Dojo error when date text box element and ContentPane is used together日期文本框元素和 ContentPane 一起使用时 Dojo 错误
【发布时间】:2011-03-03 12:09:31
【问题描述】:

我使用 dojo 选项卡容器和内容窗格在我的应用程序的所有页面中设置搜索对话框。但它在那些具有 dojo 日期文本框和选项卡容器的页面中给出错误“尝试使用 id==globsearchpkg 注册小部件,但该 id 已注册”。我使用 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,它工作正常。即使出现此错误,选项卡容器和日期文本框也可以正常工作。问题是一旦出现此错误,上下文菜单等其他组件将无法正常工作。有什么想法吗?

【问题讨论】:

    标签: javascript zend-framework dojo


    【解决方案1】:

    这意味着您要多次添加小部件,或者添加一次小部件,仅在 DOM 中删除它,然后尝试重新添加它。

    如果您真的想要在页面上多次使用该小部件,则必须为每个实例设置不同的 ID(ID 是唯一的)

    如果您只希望一次在您的页面上显示一个实例,您是否会从页面中删除搜索对话框,然后稍后尝试重新包含它?

    如果是这样,您可能是通过调用parentNode.innerHTML = ''; 或使用dojo.empty(parentNode) 或类似方法来删除它?相反,您应该致电 dijit.byId('globalsearchdialogue').destroyRecursive()

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

    【讨论】:

    • 我尝试为每个内容窗格和日期文本框使用不同的 ID。但仍然存在此错误...我在任何时候都没有删除 globalsearchdialogue,而是只使用 dijit。 byId("globalsearchdialogue").show();.该错误发生在页面加载期间,并且当我自己的任何脚本尝试更改任何内容时都不会发生...
    • 好吧,“尝试使用 id==globsearchpkg 注册小部件”肯定意味着您正在尝试创建两个具有相同 ID 的小部件。没有其他解释。所以我会弄清楚这可能是如何发生的。
    • 是否有任何选项可以获取在 dojo 中注册的小部件列表,例如 watch 表达式之类的,以便我可以追踪在某个时间点注册了哪些所有小部件??
    • 参见 dijit/_base/manager.js。你可以这样做:`dijit.registry._add = dijit.registery.add; dijit.registry.add = function(widget) { // 一些检查和控制台日志记录; dijit.registry._add(参数)}
    • mrtom 成功了.. 正是这个问题framework.zend.com/issues/browse/ZF-6563 造成了麻烦...我使用您提供的调试技巧识别了它...现在它工作得很好.. 因为你说我肯定试图创建两个具有相同 ID 的小部件 .. :D 非常感谢...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多