Как стать автором
Обновить

Комментарии 23

Исправьте пожалуйста ссылки кода плагина и примера на абсолютные пути, а то получается, что ссылки ведут на хабр :)
А пример понравился, очень здорово, нам обязательно пригодится.
Спасибо, уже исправил :)
Заметил один небольшой баг. Если отсортировать вышестоящий грид, то вложенный закроется (если раскрыт), но минус не изменится на плюс.
Спасибо
Fixed
Так вот ты какой «Дружественный пользовательский интерфейс»…
Некоторые вещи хороши лишь в разумных пределах :) Ну а тут уж ваше право, если нравится — можете именно так и использовать.
Офигительные плагины. Кинул себе в закладки. А можно у них задать разные дефинишины для колонок и полей на разных уровнях (количественно и по содержанию)?
Нет, поскольку там единый datastore и единая columnmodel.
Вот
перенесите, плиз, в блог по ExtJS, там нехватает хороших материалов
о! а я его как-то сразу не заметил :)
В 3.1 Этот компонент будет доступен из коробки через пару месяцев.
Еще бы в начало статьи сразу скриншот компонента.
Не совсем этот: TreeGrid является расширением дерева, а не грида (загрузка данных будет через Ext.tree.TreeLoader, а не через Ext.data.Store).
Есть несколько путей работы с древовидным-гридом в ExtJS. Правда не без плагинов.

Вариант 1.
Когда нужно дерево которое имеет колонки и может быть драг/дроп пересортировано.
Берем Tree, плагин ColumnTree и редактор ColumnTreeEditor.
pastebin.com/f33b993bc (мои измененные columntree и редактор).
Оригинальный плагин имел проблемы с редактированием более 1 поля.

Особенности:
Настоящее дерево. Для формирования нужны иерархические данные (многомерный массив). (http://pastebin.com/f48d4e6bf). Действия по перетасовке/перетаскиванию — родные. Гибко можно через события (onnodedrag/drop, etc) настроить логику перетаскивания.

Минусы:
Если много загрузить данных — будет рендерить все что есть, что может дать проблемы с производительностью. Но это особенность всех деревьев и их рендеринга.
Нет датастора для дерева. И соответственно обработка данных сложней без такого апи.

Вариант 2.
MaximGB tree grid.

Очень толковый плагин, но мне лично пришлось его пилить долго и упорно напильником для своего проекта. Позволяет делать древовидный грид. Есть датастор двух типов nested sets.
Поскольку с гридами в extjs работать легче чем с деревьями, то построение деревьев легче.

Огромный минус:
Писец медленный. При огромном кол-ве записей — можно застрелиться. Пришлось фиксить.

www.extjs.com/forum/showthread.php?p=380487#post380487
pastebin.com/f2fd44e13 — Еще одна моя версия для extjs 2.3, с рендерингом детей только при разворачивании родителя. Если чего то будет не хватать (ошибки), пишите в личку. Там есть пару внутренних вещей что я перегружал в extjs что-бы оно корректно работало.

Результат — стало просто летать в 10-15 раз быстрее.

Но в целом очень классная вещь, практически для 95% иерархических презентаций (списки сайтов по группам, списки продуктов по их инвентарной иерархии.) я использую этот вариант.

Вариант 3.
GroupingStore + GroupingView.

Хорош для аналитических простых списков. Типа: Грид, а грид? Нука, сгрупируй сайты мне тут по серверу. Видел варианты многоуровеневой группировки, но не использовал и ничего сказать не могу.

Минус:
Тоже медленный при больших обьемах строк. В качестве сравнения используется отрендеренная колонка (!), а не датафилд.

Тоже фиксы всякие:
pastebin.com/f7b0be3fe

Замечание:
Код представлен для версии 2.3. Не факт что он подойдет для третьей версии.

UPD:
Коды всех фиксов в заметке для версии 2.3.

«Поскольку с гридами в extjs работать легче чем с деревьями, то построение деревьев легче.»
Имел в виду что построение (заполнение данных, гламуризация внешнего вида и т.д.) грида с древовидным отображением используя плагин MaximGB tree grid легче, чем построение дерева используя Ext.Tree.

Меня более интересует компонент в котором иерархия по сути не глубокая. А вот наботы данных разные на разных уровнях (кол-во колонок и их содержание). При этом глубина может отличаться в зависимости от условий (конфигурации). И необходимость иметь возможность фильтровать/сортировать группировать каждый уровень по отдельности. Классические деревья с этим не справляются. Простейший вариант — вложение гридов. Именно поэтому появился этот топик. А за линки — большое спасибо — информация полезная.
Да это и есть тот самый мульти-групинг.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории