Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Передвинуть колонки внутри группы (https://javascript.ru/forum/extjs/62376-peredvinut-kolonki-vnutri-gruppy.html)

Moloch 07.04.2016 16:04

Передвинуть колонки внутри группы
 
Здравствуйте, как можно сдвинуть колонки внутри группы?
есть вот такая таблица http://joxi.ru/l2ZRRPPF83Eaz2
мне нужно менять местами группы колонок и колонки внутри групп. Группы двигать получается, делаю это примерно так:

var h = grid.headerCt;

h.move(i, 0);


а как менять местами колонки внутри группы? у меня выдается ошибка
Cannot read property 'isGroupHeader' of undefined


Использую Ext 6

nohuhu 07.04.2016 20:51

Делать такие штуки не очень просто, но возможно. См. Ext.grid.header.DropZone.onNodeDrop(), там содержится логика обработки перемены мест колонок через drag'n'drop.

Moloch 07.04.2016 21:00

Неужели дочерние колонки никак нельзя перемещать способом аналогичным перемещению групп?

nohuhu 07.04.2016 22:08

Перемещать-то можно, но Grid, в зависимости от конфигурации, может состоять из трёх или более компонентов. Это выглядит он монолитно, а внутри вполне змеиное гнездо, в которое лазить надо осторожно и только если нет публичного API. А в данном случае я его не вижу.

Могу открыть feature request на эту тему, но шансы, что у Найджа дойдут до него руки в ближайшие N месяцев, стремятся к нулю.

nohuhu 07.04.2016 22:29

Ха, а вот я и оказался неправ: спросил Найджа, он утверждает, что можно просто использовать обычные методы контейнера и всё должно просто работать.

Что-то типа такого:

Код:

var headerCt, columns;

headerCt = grid.getHeaderContainer();
columns = headerCt.getGridColumns();

// Вставить колонку №2 после колонки №4
headerCt.moveAfter(columns[1], columns[3]);

// Вставить колонку №3 перед колонкой №1
headerCt.moveBefore(columns[2], columns[0]);

Попробовал на одном из примеров под руками, вроде работает. :)

Moloch 08.04.2016 09:50

работает но не совсем так как надо. Допустим это исходное положение колонок http://joxi.ru/GrqXXnnINObyjA

Я хочу поменять местами колонки в группе СМР. Вот что происходит в итоге http://joxi.ru/Vm6xx88hxkKzvA
т.е колонка поменялась местами с группой а не с соседней колонкой

nohuhu 09.04.2016 01:25

Ок, значит я неправильно понял исходную задачу. В этом случае вам нужно делать всё то же самое, но на *групповой колонке* - она тоже контейнер.

Код:

var headerCt, groupColumn, innerColumns;

headerCt = grid.getHeaderContainer();
groupColumn = headerCt.down('[text="СМР-колонки"]');
innerColumns = groupColumn.getGridColumns();

groupColumn.moveAfter(innerColumns[0], innerColumns[1]);


Moloch 11.04.2016 10:01

благодарю! буду тестить


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