peirix
peirix

Reputation: 37741

Expanding all nodes in dijit.Tree

Is there a good way to expand/close all the expandable nodes in a dijit.Tree?

For those looking for an answer, put this in your initializing code:

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

At least, that works for me. And you can do the same with collapseAll() where you only need to switch _this._expandNode(node); with _this._collapseNode(node);

Upvotes: 4

Views: 8992

Answers (3)

GibboK
GibboK

Reputation: 73908

You could use on the dijit/Tree instance the following methods:

tree.expandAll();

http://dojotoolkit.org/api/?qs=1.10/dijit/Tree#1_10dijit_Tree_expandAll

or

tree.collapseAll();

http://dojotoolkit.org/api/?qs=1.10/dijit/Tree#1_10dijit_Tree_collapseAll

Upvotes: 1

Matt X
Matt X

Reputation: 21

To collapse all nodes... ( remember to NOT collapse the root node when it is not shown( I like to have multiple items shown for my trees ))

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

Upvotes: 2

Bill Keese
Bill Keese

Reputation: 1931

Yes, autoExpand=true (as an initialization parameter to the Tree).

If you need to expand/collapse dynamically, Tree used to have a method for that, but I took it out. However, you can copy it from: http://bugs.dojotoolkit.org/changeset/20529.

Upvotes: 8

Related Questions