Расширение всех узлов в 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);


person peirix    schedule 29.01.2010    source источник


Ответы (3)


Да, autoExpand=true (как параметр инициализации Дерева).

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

person Community    schedule 03.02.2010
comment
Есть ли причина, по которой его убрали? А также, похоже, он не работает при инициализации дерева. Мы упаковываем всю библиотеку dojo, поэтому у меня нет прямого доступа к самому файлу Tree.js. Однако я могу создать для него дополнительные методы при создании new Tree, но тогда _expandNode() не существует... Есть предложения? - person peirix; 03.02.2010
comment
кажется, у меня возникли проблемы с функцией обратного вызова. Я просто удалил это и сделал рекурсивный вызов expand() и почти идентичного collapse() по ссылке, которую вы разместили, и теперь это работает. - person peirix; 03.02.2010
comment
Нет особой причины, добавление этих двух методов раздует код и потребует дополнительного тестирования (и я думал, что нам все еще понадобится флаг expandOnLoad), и просто не было ясно, что кто-то хочет динамически расширяться/сжиматься... Я Думаю, да :-) Если вы подадите заявку на улучшение (на bugs.dojotoolkit.org), я добавлю эти методы в. - person Bill Keese; 04.02.2010

Чтобы свернуть все узлы... (помните, что НЕ сворачивать корневой узел, когда он не отображается (мне нравится отображать несколько элементов для моих деревьев))

_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);
    }
person Matt X    schedule 03.03.2010

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

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

person GibboK    schedule 06.02.2015
comment
Теперь это часть API. Нет необходимости в исправлении обезьяны. Просто используйте эти методы. - person voidstate; 05.02.2016