Javascript dojo/dijit内容窗格设置内容
我正在尝试将通过Javascript dojo/dijit内容窗格设置内容,javascript,dom,dojo,Javascript,Dom,Dojo,我正在尝试将通过dojo.XHRGet检索到的一些XML附加到dijit.layout.ContentPane中。在Firefox(3.6)中一切正常,但在Chrome中,我只在特定的内容窗格中返回“未定义” 我的代码如下所示: var cp = dijit.byId("mapDetailsPane"); cp.destroyDescendants(); // there are some existing Widgets/content I want to clear
dojo.XHRGet
检索到的一些XML附加到dijit.layout.ContentPane
中。在Firefox(3.6)中一切正常,但在Chrome中,我只在特定的内容窗格中返回“未定义”
我的代码如下所示:
var cp = dijit.byId("mapDetailsPane");
cp.destroyDescendants(); // there are some existing Widgets/content I want to clear
// and replace with the new content
var xhrData = {
url : "getsomexml.php",
handleAs: "xml",
preventCache: true,
failOk: true
};
var deferred = new dojo.xhrGet(xhrData);
deferred.addCallback(function(data) {
console.log(data.firstChild); // get a DOM object in both Firebug
// and Chrome Dev Tools
cp.attr("content",data.firstChild); // get the XML appended to the doc in Firefox,
// but "undefined" in Chrome
});
因为在这两种浏览器中,我都返回了一个有效的文档
对象,我知道Xhret工作得很好,但内容的设置方式似乎有些不同。是否有更好的方法来处理来自请求的返回数据
有人请求查看我的XML,所以这里是它的一部分
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1" width="672" height="1674">
<defs>
<style type="text/css">
<![CDATA[ ...bunch of CSS...
]]>
</style>
<marker refX="0" refY="0" orient="auto" id="A00End" style="overflow: visible;">
...bunch more defs...
</defs>
<g id="endpoints">
...bunch of SVG with a some...
<a xlink:href="javascript:gotoLogLine(16423,55);" xlink:type="simple">...more svg...</a>
</g>
</svg>
…更多的定义。。。
…一堆SVG和一些。。。
我已经通过WC3 XML验证程序运行了输出XML,以验证它是否有效。正如我之前所说,它在Firefox3.6中工作。我在Safari上试用了它,得到了相同的“未定义”,因此它似乎与Webkit有关。cp.containerNode.appendChild(data.firstChild)有效吗?将ContentPane视为可以接受任意XML节点的通用容器可能要求太多。它的主要用例是——并且一直是——注入HTML。并不是说它不能工作,但这是一个在这个小部件中没有很好探索的极端情况 我不确定我最近的遭遇是否与你相同。 我正在使用html头部分中加载的外部javascript文件作为检查用户脚本。 这是我在IE中生成错误的代码,但这不是在Firefox中生成错误
function loginCheck()
{
var username = dojo.byId("usernameBox").value;
var password = dojo.byId("passwordBox").value;
var loginForm = dijit.byId("loginDialog");
var mainPage = dijit.byId("entirePage");
var menuUrl = "";
if(username != 'admin' && username != 'user'){
alert('Incorrect username');
} else {
if(password != '1234') {
alert('Incorrect password');
} else {
loginForm.hide();
dojo.style(mainPage.domNode, {visibility:"visible"});
dojo.doc.title = dojo.doc.title + " : Signed in as [" + username + "]";
if(username == 'user'){
menuUrl = "../data/userMenu.json";
} else if(username == 'admin') {
menuUrl = "../data/adminMenu.json";
}
var treeStore = new dojo.data.ItemFileReadStore({
url : menuUrl
});
var treeModel = new dijit.tree.ForestStoreModel({
store : treeStore,
query : {
"type" : "category"
},
childrenAttrs : ["children"]
});
var naviTree = new dijit.Tree({
model : treeModel,
showRoot : false,
autoExpand : true
}, "naviPane");
dojo.connect(naviTree, "onClick", function(item){
var targetPage = item.link;
var targetPane = dijit.byId("centerPane");
console.log(targetPage);
**targetPane.attr('href',targetPage);**
console.log("redirect success.");
});
}
}
在**线上。我返回这个错误
网页错误详细信息
用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;Trident/4.0;SLCC2;.NET>CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;InfoPath.2;>Tablet PC 2.0;.NET4.0C;.NET4.0E;AskTB5.6)
时间戳:2010年10月19日星期二08:24:35 UTC
消息:对象不支持此属性或方法
第49行
字符:21
代码:0
URI:
在我跟踪到dojo库并在dojo/_base/xhr.js文件中使用这段代码之后
dojo.\u ioAddQueryToUrl=函数(/*dojo.\u IoCallbackArgs*/ioArgs){
//摘要:将io延迟构造发现的查询参数添加到URL。
//仅对基本上是GET类型操作的操作使用此选项。
if(ioArgs.query.length){
ioArgs.url+=(ioArgs.url.indexOf(“?”)==-1?:“&”)+ioArgs.query;
ioArgs.query=null;
}} 我的粗略解决方案是只注释“indexOf”行,然后,我的web应用程序运行时没有任何错误。
无论如何,我不确定这行代码将做什么?你能告诉我们xml是什么样子吗?我想我也尝试了cp.containerNode.appendChild(),它在Firefox中运行良好,但我在WebKit中遇到了一个问题。。。基本上,我认为正如你所指出的,这是一个边缘案例,WebKit基本上拒绝处理来自另一个文档的内容,而Firefox/Gecko似乎并不在意。我已经放弃了这一点,只是将我想做的事情转换成dojox.gfx。