ExtJS 4 TreePanel скрытие узлов?

Здравствуйте. Подскажите кто знает, бьюсь второй день, перечитал уже все что только можно.


Имеем TreePanel и textfield.

Когда пользователь что-то вводит в текстовое поле, дерево необходимо отфильтровать и оставить видимыми только те узлы, в названии которых содержится введенный текст.


Аналогичная ситуация с гридом решилась просто — фильтрацией стора. Но TreeStore не имеет метода filter. Как скрыть узел — тоже не нашел. В сети находил несколько решений, но все они были для ExtJS 3.


Вопрос собственно в том, как отфильтровать TreeStore на клиенте или как скрыть узел дерева (отфильтрую сам тогда). Создается впечатление, что я фантастически туплю, задача должна решаться каким-то простым и понятным способом.
  • Вопрос задан
  • 4901 просмотр
Пригласить эксперта
Ответы на вопрос 2
Dolios
@Dolios Автор вопроса
Нашел по сути единственно работающий вариант здесь:
www.sencha.com/forum/showthread.php?142704-Show-Hide-of-the-tree-node-in-ExtJS-4

Но человек сам пишет:
«This is a bit janky and probably unsupported but this is the current workaround I have for hiding a single node. „

Вот решение:
setNodeVisible: function(nodeId, visible) {
var node = this.getNodeById(nodeId),
view = this.getView(),
el = Ext.fly(view.getNodeByRecord(node));

el.setVisibilityMode(Ext.Element.DISPLAY);
el.setVisible(visible);
},


Но это же какой-то нереальный костыль. Неужели нет нормального способа сделать такую простую операцию :(
Ответ написан
Комментировать
TheHorse
@TheHorse
Это не очень-то и простая операция, не понятно, что делать с дочерними узлами если корень отфильтрован. Но в любом, случае ExtJS4 API говорит, что в конфигах у Ext.data.TreeStore есть filters. Если по каким-то причинам он вам не подойдет, вы всегда можете просто рекурсивно проходить по дереву и прятать/показывать все, что вам нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы