Виджеты Dojo не отображаются при возврате в ответ на XhrPost - PullRequest
3 голосов
/ 09 апреля 2010

Я пытаюсь захватить выбранный элемент в виджете Dijit Tree, чтобы отобразить оставшуюся часть веб-страницы. Вот код, который захватывает выбранный элемент и отправляет его в бэкэнд 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>

Оставшаяся часть страницы содержит 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. Является ли handleAs: «текст» в XhrPost виновником здесь?

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

Полагаю, ваши вкладки и BorderContainer не имеют высоты. Они не будут автоматически присоединяться к родительскому контейнеру, вы должны четко указать их размер. Часть dojo.parser.parse требуется в зависимости от того, как вы вводите контент, хотя, если бы «centerPane» был ContentPane, вы могли бы просто attr («content», response), и анализ был бы сделан для вас. Кроме того, всем BorderContainer нужен регион = "центр" (один), и ни один из ваших приведенных выше фрагментов не содержит ни одного.

0 голосов
/ 18 июля 2011

Обратите внимание, что поле .innerHTML применяется к объектам DOM, а не к объектам Dojo. Я думаю, что вы должны использовать dojo.byId ("centerPane"). ContainerNode.innerHTML = ...

Добавлено: я посмотрел документацию для dijit.byId и вот что там написано:

dijit.byId - это функция для поиска определенного виджета по его присвоенное имя (идентификатор). Эта функция похожа на dojo.byId, но тогда как dojo.byId возвращает DOMNodes, dijit.byId возвращает объект JavaScript это экземпляр виджета.

Это причина, почему это сработало для вас.

...