2010-01-29 111 views
4

是否有一种很好的方式来展开/关闭dijit.Tree中的所有可展开节点?展开dijit中的所有节点。树

对于那些寻找一个答案,把这个在您的初始化代码:

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

至少,这对我的作品。你可以用collapseAll()来做同样的事情,你只需要切换_this._expandNode(node);_this._collapseNode(node);

回答

8

是的,autoExpand = true(作为树的初始化参数)。

如果你需要动态展开/折叠,Tree过去有一个方法,但我把它拿出来了。但是,您可以从:http://bugs.dojotoolkit.org/changeset/20529复制它。

+0

有它得到了取出的原因是什么?而且,它似乎没有用于初始化树。我们打包了整个dojo库,所以我没有直接访问Tree.js文件本身。但是,我可以在创建一个'新树'时创建其他方法,但是'_expandNode()'不存在......任何建议? – peirix 2010-02-03 11:23:11

+0

似乎我遇到了回调函数的一些问题。我只是删除了它,并根据你发布的链接对'expand()'和几乎相同的'collapse()'进行了递归调用,现在它可以工作。 – peirix 2010-02-03 11:59:48

+0

没有特别的原因,添加这两个方法会使代码膨胀并且需要更多的测试(并且我认为我们仍然需要expandOnLoad标志),并且不清楚任何人想要动态扩展/收缩......我想你会这样做:-) 如果您提交增强权证(http://bugs.dojotoolkit.org),我将在这些方法中添加这些方法。 – 2010-02-04 14:29:21

2

折叠所有节点......(记得到不垮根节点时不显示它(我想为我的树显示多个项目))

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