2010-09-20 2 views
0

Я новичок в додзё и развитии весны. Я пытаюсь заполнить виджет Tree, используя ответ json от контроллера spring-mvc. Я внимательно слежу за примерами с сайта dojocampus.Почему мой dijit.Tree не заселен из источника json?

Во-первых, если я использую локальный источник данных работает нормально:

<script type="text/javascript"> 
    dojo.require("dojo.data.ItemFileReadStore"); 
    dojo.require("dijit.Tree"); 

    dojo.addOnLoad(function() { 
     var rawdata = [{"rid":"b1c","name":"Test Parent","children":[{"rid":"1c4","name":"Test Child 1","children":[]},{"rid":"ee6","name":"Test Child 2","children":[]}]}]; 

     var store = new dojo.data.ItemFileReadStore({ 
      data: { 
       identifier: 'rid', 
       label: 'name', 
       items: rawdata 
      } 
     }); 

     var treeModel = new dijit.tree.TreeStoreModel({ 
      store: store, 
      query: {name: 'Test Parent'}, 
      childrenAttrs: ["children"] 
     }); 

     new dijit.Tree({ 
      model: treeModel 
     }, 
     "treeOne"); 
    }); 
</script> 

<div id="treeOne"> 
</div>  

Но если я использую мой JSon URL дерево не появляется:

<script type="text/javascript"> 
    dojo.require("dojo.data.ItemFileReadStore"); 
    dojo.require("dijit.Tree"); 

    dojo.addOnLoad(function() { 

     var store = new dojo.data.ItemFileReadStore({ 
      url: "/Demo2/glossaryobjects/categories.json" 
     }); 

     var treeModel = new dijit.tree.TreeStoreModel({ 
      store: store, 
      query: {name: 'Test Parent'}, 
      childrenAttrs: ["children"] 
     }); 

     new dijit.Tree({ 
      model: treeModel 
     }, 
     "treeOne"); 
    }); 
</script> 

<div id="treeOne"> 
</div> 

Когда я отладки с помощью Firebug I может видеть, что ответ json выглядит правильно загруженным. Это выглядит так:

{"identifier": "rid", "items": {"rid": "b1c", "name": "Test Parent", "children": [{"rid" : «1c4», «name»: «Test Child 1», «children»: []}, {«rid»: «ee6», «name»: «Test Child 2», «children»: []} ]}, "метка": "имя"}

Существует ошибка в Firebug:

"dijit.tree.TreeStoreModel: запрос {" имя ":" Тест родитель "} возвратил 0 пунктов, но должны возвращает ровно один пункт "

Похоже, что ItemFileReadStore неправильно загружен. Кто-нибудь знает, что я делаю неправильно? Я отрывал свои волосы в течение нескольких дней, пытаясь заставить это работать, поэтому любая помощь очень ценится.

Cheers, Rod.

ответ

2

OK! Проблема решена (для меня):

Если у вас есть близкий взгляд на магазин, созданный каждым, данные есть для обоих, но способ отображения каждого из них отличается.

С данными JSON URL, вы получите _arrayofallitems [] _arrayoftoplevelitems Object {.... идентификатор ... элементы ... т.д.

с строковыми данными, вы получите _arrayofallitems [] 62 изделия _arrayoftoplevelitems [0] ID элементы и т.д.

Если вы перехватывать ответ JSON от xhrGet, и сравнить его с ул вы увидите, что ответ JSON не является массивом (no []), а строка -.

Решение объявить пустой массив, нажмите ответ JSON в него, затем передать массив ItemFileReadStore:

dojo.xhrGet({ 
     url: 'test.php', 
     handleAs: "json", 
     preventCache: 'true', 
     load: function(response, ioArgs){ 
        var rawdata = []; 
        rawdata.push(response); 
        var store = new dojo.data.ItemFileReadStore({ data: { 
        identifier: "id", 
        label: "label", 
       items: rawdata } 
      }); 
      loadtree(store); 
}}); 

Он работал для меня (законченный днем ​​разочарования) ...

0

ошибка вы упомянули: «dijit.tree.TreeStoreModel: запрос {» имя «:» Тест родитель «} возвратил 0 пунктов, но должен вернуться ровно один пункт»

должно быть от использования TreeStoreModel вместо того, ЛЕСА toreModel. Первый требует возврата только одного элемента для корневого узла. Вероятно, ваше исправление работает, потому что вы перетащили его в один массив.

Посмотрите на: http://ofps.oreilly.com/titles/9780596516482/application_widgets.html

Смежные вопросы