2010-01-29 112 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); 
    }