2010-01-29 5 views
4

Existe-t-il un bon moyen de développer/fermer tous les nœuds extensibles dans un dijit.Tree?Extension de tous les nœuds dans dijit.Tree

Pour ceux qui recherchent une réponse, mettez ceci dans votre code d'initialisation:

var treeControl = new dijit.Tree({ 
    model: treeModel, 
    expandAll: function() { 
     // summary: 
     //  Expand all nodes in the tree 
     // returns: 
     //  Deferred that fires when all nodes have expanded 

     var _this = this; 

     function expand(node) { 
      _this._expandNode(node); 

      var childBranches = dojo.filter(node.getChildren() || [], function(node) { 
       return node.isExpandable; 
      }); 

      var def = new dojo.Deferred(); 
      defs = dojo.map(childBranches, expand); 
     } 
     return expand(this.rootNode); 
    } 
}); 

Au moins, cela fonctionne pour moi. Et vous pouvez faire la même chose avec collapseAll() où vous avez seulement besoin de basculer _this._expandNode(node); avec _this._collapseNode(node);

Répondre

8

Oui, autoExpand = true (comme un paramètre d'initialisation à l'arbre).

Si vous avez besoin de développer/réduire dynamiquement, Tree utilisait une méthode pour cela, mais je l'ai retiré. Toutefois, vous pouvez le copier à partir de: http://bugs.dojotoolkit.org/changeset/20529.

+0

Y at-il une raison pour laquelle il a obtenu retiré? Et aussi, cela ne semble pas fonctionner lors de l'initialisation d'un arbre. Nous emballons toute la bibliothèque dojo, donc je n'ai pas d'accès direct sur le fichier Tree.js lui-même. Cependant, je peux créer des méthodes supplémentaires quand je crée un 'nouvel arbre ', mais alors' _expandNode()' n'existe pas ... Des suggestions? – peirix

+0

semble avoir eu quelques problèmes avec la fonction de rappel. Je viens de supprimer cela et j'ai fait un appel récursif sur 'expand()' et presque identique 'collapse()' en fonction du lien que vous avez posté, et maintenant cela fonctionne. – peirix

+0

Aucune raison particulière, l'ajout de ces deux méthodes aurait gonflé le code et exigé plus de tests (et je pensais que nous aurions encore besoin de l'indicateur expandOnLoad), et il n'était pas clair que quiconque voulait développer/contracter dynamiquement ... Je suppose que vous faites :-) Si vous déposez un ticket d'amélioration (à http://bugs.dojotoolkit.org), je vais ajouter ces méthodes. –

2

Pour réduire tous les noeuds ... (souvenez-vous à l'effondrement PAS le nœud racine quand il n'apparaît pas (j'aime avoir plusieurs éléments affichés pour mes arbres))

_collapseAllTreeNodeContainers: function(){ 

    var _tree = _this; 

     function collapse(node) { 
    // never collapse root node, otherwise hides whole tree ! 
    if (_tree.showRoot == false && node != _tree.rootNode) { 
    _tree._collapseNode(node); 
    } 

      var childBranches = dojo.filter(node.getChildren() || [], function(node) { 
       return node.isExpandable; 
      }); 

      var def = new dojo.Deferred(); 
      defs = dojo.map(childBranches, collapse); 
     } 
     return collapse(_tree.rootNode); 
    } 
Questions connexes