【问题标题】:ajax page loading -Dojoajax 页面加载-Dojo
【发布时间】:2011-05-09 17:37:30
【问题描述】:

您好,我有一个页面,左侧有一个导航菜单,当有任何链接时 单击此菜单,将向服务器发送 Ajax get 调用,然后 右侧会更新为新页面。

我目前的做法是创建 2 列,左侧列 包含导航链接,右侧 col 包含一个名为 具有 dojox.layout.ContentPane.Now 的 dojotype 的内容 数据是从服务器接收的,我像这样改变它的内容

dijit.byId("thecontent").setContent=data

现在当我点击导航链接时,右侧会出现 正确显示(此页面有 dijits 和一些脚本 处理 onclick 事件)。但是firebug返回一个错误说

"Tried to register widget with id==thecontent but that id is already registered"

我的主要道场包含如下所示:-

<script type="text/javascript" src="http://o.aolcdn.com/dojo/1.5/dojo/dojo.xd.js"djConfig="parseOnLoad:false"></script>

我在函数 dojo.addOnLoad 中做了一个 dojo.parser.parse(),如下所示:-

 dojo.addOnLoad(function(){
     dojo.require("dijit.form.Button");
     dojo.require("dijit.form.Textarea");
     dojo.require("dijit.form.ValidationTextBox");
     dojo.require("dojox.layout.ContentPane");
     dojo.require("dijit.Editor");
   dojo.addOnLoad(function(){
        dojo.parser.parse();
        sendgetrequest();//this initiates the xhrget request
        dojo.removeClass(dojo.byId("doc3"),"hiddendiv");
        }

);
    })

我也无法在这个新加载的页面中运行任何脚本。没有 onclick 事件起作用,只显示 dijit 小部件...

【问题讨论】:

  • 您的意思是嵌套 addOnLoad 调用吗?可能需要查看整个页面才能了解发生了什么。
  • 四件事:(1) 最高代码应该是setContent(data) 而不是setContent=data,但我认为您在实际代码中可能是正确的。 (2) 该错误意味着您尝试两次实例化具有相同 ID 的小部件 - 您需要唯一的 ID,或者您并没有真正销毁您打算替换的小部件。 (3) @peller,嵌套的 addOnLoads 在这里完成的方式是有效的,但实际上可能根本不需要外部的 addOnLoad。 (4) 与 peller 相呼应,这将有助于查看更多上下文代码 - 即单击导航链接时究竟发生了什么。

标签: ajax dojo


【解决方案1】:

正如 Ken 已经说过的,该错误意味着您正在创建一个具有已存在 id 的 dijit。我的猜测是您在右侧面板中加载 AJAX 内容,而不首先破坏旧的右侧面板。

在加载新内容之前,尝试在右侧面板中的主 dijit 容器上调用 destroyRecursive。此外,如果您不需要设置 dijit 的 id,您可能会删除 id(但这会留下内存漏洞,因为旧的 dijit 不会被破坏)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2010-09-08
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多