Dojo Widgets在响应XhrPost时返回时不呈现

时间:2010-04-09 11:39:44

标签: 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" 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中的“文本”是罪魁祸首吗?

2 个答案:

答案 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对象   这是小部件的实例。

这就是为什么它适合你的原因。