2010-09-20 85 views
0

我是道場和春季發展的新手。我正在嘗試使用spring-mvc控制器的json響應來填充Tree小部件。我正在密切關注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調試可以看到json響應似乎正確加載。它看起來像這樣:

{「identifier」:「rid」,「items」:{「rid」:「b1c」,「name」:「Test Parent」, 「children」:[{「rid」 :「1c4」,「name」:「Test Child 1」,「children」:[]}, {「rid」:「ee6」,「name」:「Test Child 2」,「children」:[]} ]}, 「標籤」: 「名字」}

有螢火蟲的錯誤:

「dijit.tree.TreeStoreModel:查詢{」 名 「:」 測試父「}返回0的項目,但必須只返回一個項目「

它看起來像ItemFileReadStore未正確加載。任何人都知道我在做什麼錯了?我一直在努力讓自己的頭髮出現幾天,所以任何幫助都非常感謝。

乾杯, 杆。

回答

2

好的!問題已解決(對我而言):

如果您仔細查看了每個商店生成的商店,則兩者的數據都存在,但商店代表的方式各不相同。

與URL JSON數據,你會得到 _arrayofallitems [] _arrayoftoplevelitems對象{.... ID ... 項目... 等

與字符串數據,你會得到 _arrayofallitems [] 62項 _arrayoftoplevelitems [0] ID 項 等

如果攔截從xhrGet JSON響應,並比較所述第一環,你會看到JSON響應不是數組(而是[]),而字符串是。

解決方法:聲明空數組,推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

相關問題