Ajax Dojo小部件在响应XhrPost返回时不呈现

Ajax Dojo小部件在响应XhrPost返回时不呈现,ajax,django,text,post,dojo,Ajax,Django,Text,Post,Dojo,我试图在Dijit树小部件中捕获所选项目,以呈现网页的其余部分。以下是捕获所选项目并将其发送到Django后端的代码: <div dojoType="dijit.Tree" id="leftTree" store="leftTreeStore" childrenAttr="folders" query="{type:'folder'}" label="Explorer"> <script type="dojo/method" event="onClick

我试图在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>

警报(“执行节点”+termStore.getLabel(项));
变量xhrags={
url:“/加载页面的中心部分”,
handleAs:“文本”,
postData:dojo.toJson(leftTreeStore.getLabel(item),true),
加载:函数(数据){
dojo.byId(“中心窗格”).innerHTML=数据;
//window.location=数据;
},
错误:函数(错误){
dojo.byId(“中心窗格”).innerHTML=“加载错误…

”; } } dojo.byId(“中心窗格”).innerHTML=“加载…”

”; var deferred=dojo.xhrPost(xhrags);
页面的其余部分包含带有dojo小部件的HTML代码。这是作为“响应”发送回select item事件的代码。以下是一个片段:

<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中的handleAs:“text”是罪魁祸首吗?

我猜您的选项卡和边框容器没有高度。它们不会自动连接到父容器,您必须明确它们的大小。根据注入内容的方式,需要dojo.parser.parse部分,但如果“centerPane”是ContentPane,则只需attr(“content”,response),解析将为您完成。此外,所有BorderContainer都需要一个region=“center”(一个),并且上面的代码段都不包含一个

注意.innerHTML字段适用于DOM对象,而不是Dojo对象。我认为应该使用dojo.byId(“中心窗格”).containerNode.innerHTML=

补充:我查看了dijit.byId的文档,下面是它的说明:

byId是一个函数,用于通过其 分配的名称(id)。此函数类似于dojo.byId,但 byId返回DOMNodes,dijit.byId返回一个JavaScript对象 这就是小部件的实例


这就是它对您有效的原因。

-在“dojo.byId”(“中心窗格”).innerHTML=data”之后添加dojo.parser.parse(dojo.byId(“中心窗格”))也没有帮助。-添加样式信息(class=“soria”)也没有帮助。问题在于以下LOC:dojo.byId(“中心窗格”).innerHTML=data;将其替换为以下行执行作业dijit.byId(“centerPane”).innerHTML=data;parser.parse(dijit.byId(“中心窗格”);另外,您建议的另一个解决方案也有效:dijit.byId(“中心窗格”).attr(“内容”,数据);此外,您可以使用
contentpane.attr(“href”,“newuri.html”)
来代替所有的xhr“垃圾”,解析器也将被调用,并为您处理所有xhr内容。