2010-10-11 6 views
0

J'ai écrit le code suivant pour créer un arbre de dojo.dojo comment obtenir tous les noeuds d'arbre de type spécifique?

store = new dojo.data.ItemFileWriteStore({url: link}); 
           treeModel = new dijit.tree.TreeStoreModel({ 
              store: store, 
              query: { 
                "type": "ROOT" 
                }, 
              rootId: "newRoot", 
              childrenAttrs: ["children"] 
             }); 

           tree= new dijit.Tree({model: treeModel},"treeOne"); 

Suite est ma structure de fichier JSON:

{ 
    identifier: "id", 
    label: "name", 
    items: [ 
    {id: "ROOT",name: "Change Windows",type: "ROOT"}, 
    ]} 

Je veux tous les nœuds (essentiellement leur 'id' partie) du 'type' spécifique, permet de dire type = "ROOT". Y at-il de toute façon pour obtenir tous ces nœuds? J'ai pensé faire cela en utilisant tree._itemNodeMap, mais je ne connais aucun moyen d'itérer à travers cette map entière, parce qu'elle a besoin d'un identifiant comme entrée pour retourner un nœud spécifique.

Répondre

4

Si vous parlez d'obtenir les éléments de données par programme, vous pouvez les obtenir directement du magasin en utilisant fetch.

Exemple JSON pour ItemFile * magasin:

{ 
    "identifier": "id", 
    "label": "name", 
    "items": [{ 
     "id": "ROOT", 
     "name": "Root", 
     "type": "ROOT", 
     "children": [{ 
      "id": "P1", 
      "name": "StackExchange", 
      "type": "website", 
      "children": [{ 
       "id": "C1", 
       "name": "StackOverflow", 
       "type": "website" 
      }, 
      { 
       "id": "C2", 
       "name": "ServerFault", 
       "type": "website" 
      }] 
     }, 
     { 
      "id": "P2", 
      "name": "Sandwich", 
      "type": "food", 
      "children": [{ 
       "id": "C3", 
       "name": "Ham", 
       "type": "food" 
      }, 
      { 
       "id": "C4", 
       "name": "Cheese", 
       "type": "food" 
      }] 
     }, 
     { 
      "id": "P3", 
      "name": "Potluck", 
      "type": "mixed", 
      "children": [{ 
       "id": "C5", 
       "name": "Google", 
       "type": "website" 
      }, 
      { 
       "id": "C6", 
       "name": "Banana", 
       "type": "food" 
      }] 
     }] 
    }] 
} 

Exemple de code:

dojo.require('dojo.data.ItemFileReadStore'); 

dojo.ready(function() { 
    var store = new dojo.data.ItemFileReadStore({ 
     url: 'so-data.json' 
    }); 
    store.fetch({ 
     query: { 
      type: 'food' 
     }, 
     queryOptions: { 
      deep: true 
     }, 
     onItem: function(item) { 
      console.log(store.getLabel(item)); 
     } 
    }); 
}); 

Ce consignera Sandwich, jambon, fromage et banane.

Questions connexes