Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Скрывать в дереве только необходимые разделы (https://javascript.ru/forum/extjs/76035-skryvat-v-dereve-tolko-neobkhodimye-razdely.html)

Ambassador 27.11.2018 17:07

Скрывать в дереве только необходимые разделы
 
Приветствую.
В дереве при нажатии на кнопку скрываю записи:

{
       text: 'Collapse All',
       handler:function()
           {
    	    me.collapseAll()    	
           }
     }


Скрываются все записи, остается в видимости только Root.
Как сделать что бы находящиеся под Root 1го уровня разделы отображались?
Т.е что бы было так:
All otdels
----Otdel1
----Otdel2

А так же как можно реализовать скрытие дерева в handler кнопки, если она будет находиться не в initComponent: function() ?

Пример в fiddle
Спасибо

siber-biber 27.11.2018 19:51

Цитата:

Сообщение от Ambassador (Сообщение 499430)
Как сделать что бы находящиеся под Root 1го уровня разделы отображались?
Т.е что бы было так:
All otdels
----Otdel1
----Otdel2

вызывайте collapse (https://docs.sencha.com/extjs/6.5.2/...ethod-collapse) на записях которые должны остаться отображаемыми.
{
                            text: 'Collapse All',
                            handler:function()
    						{
                                var nodesToCollapse = me.getStore().getRoot().childNodes;
                        
                                Ext.each(nodesToCollapse, function (node) {
                                    node.collapse();
                                });
                            }
                        }

Ambassador 28.11.2018 14:05

Цитата:

Сообщение от siber-biber (Сообщение 499437)
вызывайте collapse (https://docs.sencha.com/extjs/6.5.2/...ethod-collapse) на записях которые должны остаться отображаемыми.
{
                            text: 'Collapse All',
                            handler:function()
    						{
                                var nodesToCollapse = me.getStore().getRoot().childNodes;
                        
                                Ext.each(nodesToCollapse, function (node) {
                                    node.collapse();
                                });
                            }
                        }

siber-biber - Спасибо

Что касаемо второго вопроса: "как можно реализовать скрытие дерева в handler кнопки, если она будет находиться не в initComponent: function()?", то сделал так:
{
        text: 'Развернуть',
        handler : function(button, e) {
        var tree    = button.up('questiontree')    
        tree.expandAll()
    	tree.resumeLayouts(true)  
            
    }
    },
    {
        text: 'Свернуть',
        handler:function(button, e)
        {
            var tree    = button.up('questiontree')
            var nodesToCollapse = tree.getStore().getRoot().childNodes
            Ext.each(nodesToCollapse, function (node) {
                node.collapse();
            });
            console.log(node)
        }
    }

Работает, но при нажатии на "Развернуть" в консоли предупреждение:
Mismatched call to resumeLayouts - layouts are currently not suspended

пер. Несоответствие вызова resumeLayouts - макеты в настоящее время не приостановлены .

При нажатии на "Свернуть" ошибка:
ReferenceError: node is not defined


Почему возникает предупреждение и ошибка?

Swat2k 28.11.2018 15:34

А зачем вызывать tree.resumeLayouts(true), что вы хотели сделать?
А по поводу свернуть, у вас не определена переменная node

Ambassador 28.11.2018 17:00

Цитата:

Сообщение от Swat2k (Сообщение 499458)
А зачем вызывать tree.resumeLayouts(true), что вы хотели сделать?

Подумал что это необходимый метод для правильного рендеринга записей дерева после их развертывания.
Спасибо


Часовой пояс GMT +3, время: 04:01.