Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Фильтрация дерева


Автор: ICEMAN3141592 24.1.2012, 10:04
Здравствуйте. Делаю фильтрацию дерева на 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.
Проблема в том, что фильтруются те узлы корня, у которых в названии есть последовательность букв совпадающая с некоторой последовательностью в названии корня. Если введенный текст имеется в корне, то отображается корень И его узлы, если в них присутствует текст. Если корень не имеет введенного текста, то ничего не отображается, даже если дочерние узлы и имеют совпадение.
Проблема 

Автор: ICEMAN3141592 24.1.2012, 16:41
Просмотры растут, а ниодного ответа  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)