2012-09-05 101 views
0

我需要延遲加載目錄到dijit.Tree這是在dijit.form.Dialog。 我得到的根目錄,我可以把它們放入與根節點'計算機', 樹,但我不知道如何讓延遲加載工作。沒有得到dijit.Tree到延遲加載

當我點擊一個節點時,我調用了一個函數,它調用ajax來獲取所選節點的子節點。我可以獲取它們並將它們呈現爲JSON並返回到gsp(我認爲它們已經很好地形成)。但是,當我嘗試將它們放入商店時,它會失敗。我無法獲得store.newItem()的工作。無論如何,我真的不知道這是否是正確和最簡單的方法。我搜索並嘗試失敗,不幸的是,我卡住了。

我用:

  • 的Grails 1.3.9
  • Dojo Toolkit的1.6

的方式我如何獲得數據存儲區的GSP:

File [] roots = File.listRoots()   
    def item = [] 

    roots.each{ 
     item << [ 
      name   : it.getAbsolutePath(), 
      path   : it.getAbsolutePath(), 
      children  : [] 
     ] 
    } 
    def store = [ 
     identifier: 'path', 
     label: 'name', 
     items: item 
    ] 

    def retVal = [store: store] 

    render retVal as JSON 

店的定義,模型和樹:

function prepare(dataStore) {       
     var store = new dojo.data.ItemFileWriteStore({ 
       data: dataStore 
     }); 
     var treeModel = new dijit.tree.ForestStoreModel({ 
       store: store, 
       rootId : "root", 
       rootLabel : "Computer", 
       childrenAttrs: ["children"] 
     }); 
     var treeControl = new dijit.Tree({ 
       id: 'directoryTree', 
       model: treeModel, 
       autoExpand: false, 
       onClick: loadDirectories 
       }, 
       "treeOne"); 
     } 

下面的代碼我如何嘗試編輯存儲,數據是一個列表:

data = [ 
     [name: 'info', path: 'C:\temp\info', children: []] 
     [name: 'grmpf', path: 'C:\temp\grmpf', children: []] 
     ... 
    ] 

    for(i=0; i < data.length; i++){ 
     store.newItem({name: data[i].name, path: data[i].path, children: data[i].children}, {parent: parent.path[0], attribute: 'children'}); 
     store.save(); 
    } 

我嘗試了這種方式有一次,我刪除的項目,編輯該項目,並把它再次進店。但沒有任何工作..

如果任何人都可以給我任何見解,我將不勝感激!

+0

請顯示一些關鍵代碼。 –

+0

我編輯了我的條目並在其中添加了一些代碼。如果您需要更多,請詢問 – Melanie

+0

螢火蟲控制檯中的任何錯誤? – maialithar

回答

0

幸運的是,我發現很奇怪的問題...

嗯,我想:

store.newItem(jsObj, parent); 
    store.save(); 

解決辦法:

model.newItem(jsObj, parent); 

而不是添加項存儲,我將其放入模型中,然後運行。 我真的不知道爲什麼。也許有人可以向我解釋。 謝謝