我正在尝试捕获Dijit树小部件中的所选项目以呈现网页的剩余部分。以下是捕获所选项目并将其发送到Django后端的代码:
<div dojoType="dijit.Tree" id="leftTree" store="leftTreeStore" childrenAttr="folders" query="{type:'folder'}" label="Explorer">
<script type="dojo/method" event="onClick" args="item">
alert("Execute of node " + termStore.getLabel(item));
var xhrArgs = {
url: "/load-the-center-part-of-page",
handleAs: "text",
postData: dojo.toJson(leftTreeStore.getLabel(item), true),
load: function(data) {
dojo.byId("centerPane").innerHTML = data;
//window.location = data;
},
error: function(error) {
dojo.byId("centerPane").innerHTML = "<p>Error in loading...</p>";
}
}
dojo.byId("centerPane").innerHTML = "<p>Loading...</p>";
var deferred = dojo.xhrPost(xhrArgs);
</script>
</div>
页面的其余部分包含带有dojo小部件的HTML代码。这是作为“响应”发送回选择项目事件的代码。这是一个片段:
<div dojoType="dijit.layout.TabContainer" id="tabs" jsId="tabs">
<div dojoType="dijit.layout.BorderContainer" title="Dashboard">
<div dojoType="dijit.layout.ContentPane" region="bottom">
first tab
</div>
</div>
<div dojoType="dijit.layout.BorderContainer" title="Compare">
<div dojoType="dijit.layout.ContentPane" region="bottom">
Second Tab
</div>
</div>
</div>
它呈现了这个html'响应'但没有dojo小部件。处理在XhrPost中的“文本”是罪魁祸首吗?
答案 0 :(得分:3)
我的猜测是你的Tabs和BorderContainer没有高度。它们不会自动附加到父容器,您必须明确其大小。根据您注入内容的方式,dojo.parser.parse部分是必需的,但如果“centerPane”是ContentPane,您可以只是attr(“内容”,响应),并且将为您完成解析。此外,所有BorderContainer都需要一个region =“center”(一个),而你上面的代码片段都不包含一个。
答案 1 :(得分:0)
请注意,.innerHTML字段适用于DOM对象而不适用于Dojo对象。我认为你应该使用dojo.byId(“centerPane”)。containerNode.innerHTML = ...
补充:我看了dijit.byId的文档,这就是它的内容:
dijit.byId是一个用于查找特定小部件的函数 指定名称(id)。此函数类似于dojo.byId但是 dojo.byId返回DOMNodes,dijit.byId返回一个JavaScript对象 这是小部件的实例。
这就是为什么它适合你的原因。