2012-10-04 38 views
0

我是學習dojo的新手,並試圖使用示例代碼來學習它。 使用Dojo 1.6在DOJO 1.6中創建排序樹?

隨着示例代碼的幫助下,我創建了一個樹

enter image description here

現在我想申請根排序,也對孩子。 在此sample代碼的幫助下,我更改了代碼

輸出未排序n,但根文件夾已更改其位置並刪除子項。

Plz幫我解決了這個問題。

我的代碼:

dojo.require("dojo.data.ItemFileWriteStore"); 
dojo.require("dojo.data.ItemFileReadStore"); 
dojo.require("dijit.tree.ForestStoreModel"); 
dojo.require("dijit.Tree"); 
var data = [ { id: 1, name: "answerTypeLabel",     type:'scenario', children:[{_reference: 2}]}, 
         { id: 2, name: "acceptRequestLabel",    type:'paragraph', data: "acceptRequestLabel"}, 
         { id: 3, name: "rejectRequestLabel",    type:'scenario', children:[{_reference: 5},{_reference: 6}]}, 
         { id: 4, name: "MoreInformationLabel",  type:'scenario', children:[{_reference: 7},{_reference: 8}]}, 
         { id: 5, name: "rejectRequestStatusLabel", type:'paragraph', data: "rejectRequestStatusLabel"}, 
         { id: 6, name: "rejectRequestNotCoveredLabel", type:'paragraph',  data: "rejectRequestNotCoveredLabel" }, 
         { id: 7, name: "MoreInformationDocumentLabel", type:'paragraph',  data: "MoreInformationDocumentLabel"}, 
         { id: 8, name: "MoreInformationDataLabel", type:'paragraph', data: "MoreInformationDataLabel"} 
        ]; 
dojo.addOnLoad(function() { 
    var sortableStore = new dojo.data.ItemFileReadStore({ 
     data: { 
       identifier: 'id', 
         label: 'name', 
         items: data 
     } 
    }); 
    var model = new dijit.tree.ForestStoreModel({ 
     rootLabel: 'Names', 
     store: new dojo.data.ItemFileWriteStore({ 
      data: { 
       identifier: 'id', 
       items: [], 
       label: 'name' 
      } 
     }) // blank itemsstore 
    }) 
    var tree = new dijit.Tree({ 
     model: model, 
     updateItems: function(items) { 
      var self = this; 
      console.log('pre', this.model.root.children); 

      dojo.forEach(items, function(newItem) { 
       console.log('add', newItem); 
       try { 
        self.model.store.newItem({ 
         id: sortableStore.getValue(newItem, 'id'), 
         name: sortableStore.getValue(newItem, 'name'), 
         type: sortableStore.getValue(newItem, 'type'), 
         data: sortableStore.getValue(newItem, 'data'), 

        }); 
       } catch (e) { 
        console.log(e); 
       } 
      }); 
      console.log('post', this.model.root.children); 
      console.log("children: ", this.rootNode.getChildren()); 

     }, 
    }); 
    tree.placeAt(dojo.body()); 
    sortableStore.fetch({ 
     query: { 
      type:'scenario' 
     }, 
     sort: [{ 
      attribute: "name"}], 
     onComplete: function(items) { 
      console.log(items, 'sorted'); 
      tree.updateItems(items); 

     } 
    }) 
}); 

輸出:output of above code

回答

1

的 '名' 從你的起源,設置 'rootLabel'。

順便說一句,小提琴有修改和僅僅是糊狀斌樣的功能:)

您需要使用樹模型pasteItem插入引用的項目(以下簡稱「兒」每個「的newitem」的屬性)。

否則,還有另一種方法,如果你擺脫了數據的'_reference'結構。請參閱:http://jsfiddle.net/GHFdA/1/

+0

太棒了..謝謝 – Prso

+0

:'store._arrayOfTopLevelItems'是商店的私有屬性,不應該使用它。有人建議使用fetch。但我不明白如何使用它。你能幫忙嗎? – Prso

+0

請幫我用this.with抓取我只能得到根數據不是孩子排序。如何獲得排序的孩子數據。 – Prso