Вы можете пройтись по всем дочерним узлам в дереве вместо того, чтобы пройти через магазин. Все узлы дерева реализуют TreeNodeInterface , который имеет необходимые методы. cascadeBy
метод, вероятно, то, что вы ищете. Он будет вызывать функцию рекурсивно на каждом дочернем узле узла. По сути, это то же самое, что и фильтр для магазина, но он знает об иерархии дерева.
var searchStr = Ext.getCmp('searchField').getValue();
var matchingNodes = [];
var tree = Ext.getCmp('infra_tree');
// You could get the selected node, or any other node as start node.
// I take the root node as example.
var startNode = tree.getRootNode();
startNode.cascadeBy(function (childNode) {
if (childNode.get('text') == searchStr)
{
matchingNodes.push(childNode);
}
}, this);
Вы также можете искать любое другое поле в childNode. Обычно у тех узлов, которые я держу в деревьях, другая модель. Если у меня есть модель teacher
, отображаемая в дереве, у меня есть teacherTreeModel
с teacher
. Таким образом, модель дерева учителя не сохраняется в базе данных, а только модель учителя. Обнаружено, что во многих случаях это проще.