【发布时间】: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 相呼应,这将有助于查看更多上下文代码 - 即单击导航链接时究竟发生了什么。