2012-10-04 5 views
0

Je suis nouveau pour apprendre le dojo et essayer d'apprendre en utilisant le code des échantillons. Utiliser dojo 1.6Créer un arbre trié dans DOJO 1.6?

Avec l'aide de codes d'échantillons, j'ai créé un arbre

enter image description here

maintenant je veux appliquer le tri sur la racine et sur l'enfant. Avec l'aide de ce code sample, j'ai changé le code

La sortie n'est pas triée n mais le dossier racine a changé de position et l'enfant est supprimé.

Plz m'aider à résoudre ce problème.

Mon code:

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); 

     } 
    }) 
}); 

Sortie: output of above code

Répondre

1

Les origines des 'noms' de paramètre que vous 'rootLabel'.

BTW, vièles ont des révisions et est tout simplement une pâte-bin comme caractéristique :)

Vous devez utiliser le modèle d'arbre pasteItem pour insérer des éléments référencés (la propriété « enfants » de chaque « newItem »).

Sinon, il existe une autre approche, si vous supprimez la structure '_reference' de vos données. Voir: http://jsfiddle.net/GHFdA/1/

+0

incroyable .. Merci – Prso

+0

: 'store._arrayOfTopLevelItems' est une propriété privée d'un magasin et on ne devrait pas l'utiliser. Quelqu'un a suggéré d'utiliser chercher. mais je ne comprends pas comment l'utiliser. Peux-tu aider s'il te plait. – Prso

+0

s'il vous plaît aidez-moi avec this.with récupérer je peux obtenir seulement les données de racine triées pas l'enfant. Comment trier les données enfant – Prso

Questions connexes