Здравствуйте. Делаю фильтрацию дерева на ExtJs 3.4, но не получается что-то. Из примеров нашел только для ExtJs.Net http://examples.ext.net/#/TreePanel/Advanced/Filter/
| Код | var triggerField = new Ext.form.TriggerField({ fieldLabel: 'Поиск', triggerClass: 'x-form-search-trigger', enableKeyEvents: true }); //--------------------------------------------------------------- // toolbar дерева, оно большое, поэтому только часть tbar: { items: [ { xtype: 'tbtext', text: 'Поиск' }, { xtype: 'tbspacer' }, triggerField ] } //--------------------------------------------------------------- triggerField.on('keyUp', function(element, event) { var text = element.getRawValue(); if (Ext.isEmpty(text, false)) { return; } if (event.getKey() === Ext.EventObject.ESC) { element.onTriggerClick(); } else { var regExp = new RegExp(".*" + text + ".*", "i"); var treeFilter = new Ext.tree.TreeFilter(tree); // Если название отдела if (isNaN(parseInt(text))) { treeFilter.filterBy(function (node) { return regExp.test(node.text); }); } else { treeFilter.filterBy(function (node) { return regExp.test(node.id); }); } } }, triggerField, { buffer: 100 } ); //--------------------------------------------------------------- triggerField.onTriggerClick = function(event) { this.setValue(""); //tree.collapseAll(); tree.getRootNode().expand(); tree.expandAll(); // tree.getRootNode().ensureVisible(); };
|
фильтрацию делаю по тексту узлов, так и по id. Проблема в том, что фильтруются те узлы корня, у которых в названии есть последовательность букв совпадающая с некоторой последовательностью в названии корня. Если введенный текст имеется в корне, то отображается корень И его узлы, если в них присутствует текст. Если корень не имеет введенного текста, то ничего не отображается, даже если дочерние узлы и имеют совпадение. Проблема |