2010-01-29 2 views
4

Есть ли способ расширить/закрыть все расширяемые узлы в dijit.Tree?Расширение всех узлов в dijit.Tree

Для тех, кто ищет ответ, это в вашем коде инициализации:

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 (в качестве параметра инициализации для Дерева).

Если вам нужно динамически развернуть/свернуть, для дерева используется метод, но я его вынул. Однако вы можете скопировать его с: http://bugs.dojotoolkit.org/changeset/20529.

+0

Существует причина, он получил вынимают? А также, похоже, не работает над инициализацией дерева. Мы упаковываем всю библиотеку додзё, поэтому у меня нет прямого доступа к самому файлу Tree.js. Тем не менее, я могу создавать дополнительные методы при создании «нового дерева», но тогда '_expandNode()' не существует ... Любые предложения? – peirix

+0

Кажется, у меня возникли проблемы с функцией обратного вызова. Я просто удалил это и сделал рекурсивный вызов 'expand()' и почти идентичный 'collapse()' в соответствии с опубликованной вами ссылкой, и теперь он работает. – peirix

+0

Нет особой причины, добавив эти два метода, чтобы раздуть код и потребовать больше тестирования (и я думал, что нам еще нужен флаг expandOnLoad тоже), и просто не было ясно, что кто-то хочет динамически расширять/заключать контракты ... Я думаю, вы это делаете :-) Если вы добавите билет на повышение (на http://bugs.dojotoolkit.org), я добавлю эти методы. –

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

Вы могли бы использовать на dijit/Tree экземпляра следующие методы:

tree.expandAll(); 

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

или

tree.collapseAll(); 

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

+0

Теперь это часть API. Нет необходимости в исправлении обезьян. Просто используйте эти методы. – voidstate

Смежные вопросы