Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.02.2012, 17:37
Интересующийся
Отправить личное сообщение для ICEMAN3141592 Посмотреть профиль Найти все сообщения от ICEMAN3141592
 
Регистрация: 18.01.2012
Сообщений: 15

Как использовать фильтр в дереве ? ExtJS 3.4
Подскажите, пожалуйста, как использовать фильтрацию узлов дерева в ExtJS 3.4 ? Создал Ext.tree.TreeFilter, но он проверяет только атрибут корня и все
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2012, 12:19
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Насколько я понял c фильтрацией в дереве совсем плохо. Даже в 4-ке предлагаются прыжки с переподвыподвертом над Гибралтаром в виде добавления/удаления узлов, cascadeBy etc. Для 3-ки ж попробуйте Ext.ux.tree.TreeFilterX от Saki Мо удовлетворит...
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2012, 19:35
Аспирант
Отправить личное сообщение для miha-ha Посмотреть профиль Найти все сообщения от miha-ha
 
Регистрация: 03.09.2010
Сообщений: 39

У меня так работает:
var config = {
            readOnly: false,
            isExpand: false,
            mode: 'local',
            treeFilter:  new Ext.tree.TreeFilter(this.getTree(), {
                autoClear: true,
                filterBy : function(fn, scope, startNode){
                    startNode = startNode || this.tree.root;
                    if(this.autoClear){
                        this.clear();
                    }
                    var found = {};
                    var af = this.filtered, rv = this.reverse;
                
                    var f = function(n){
                        if(n == startNode){
                            return true;
                        }
                        if(af[n.id]){
                            return false;
                        }
                        var m = fn.call(scope || n, n);
                        if(!m || rv){
                            af[n.id] = n;
                            //                        n.ui.hide();
                            //                        return false;
                            return true;
                        }
                    
                        found[n.id] = n;
                        return true;
                    };
                
                    startNode.cascade(f);
                
                    for(var idf in found){
                        if(typeof idf != "function"){
                            var curFoundItem = found[idf];
                            var p = curFoundItem.parentNode;
                            while(p){
                                delete af[p.id];
                                p = p.parentNode;
                            }
                        }
                    }
                
                    for(var id in af){
                        if(typeof id != "function"){
                            var n = af[id];
                            n.ui.hide();
                        }
                    }
                
                    //startNode.cascade(f2);
                
                    if(this.remove){
                        for(var id in af){
                            if(typeof id != "function"){
                                var n = af[id];
                                if(n && n.parentNode){
                                    n.parentNode.removeChild(n);
                                }
                            }
                        }
                    }
                }
            }),

            listeners: {
                scope: this,
                beforequery: function(){
                  return false;
                },
                keyup: {
                    fn: function(field, key){
                        if(!this.isExpand)
                            this.expand();
                        var value = field.getRawValue();
                        if(Ext.isEmpty(value) && !Ext.isEmpty(field.treeFilter)){
                            field.treeFilter.clear();
                            return;
                        }
                        var re = new RegExp('' + value + '', 'i');
                        var tree = field.getTree();
                        tree.expandAll();
                        field.treeFilter.filter(re);
                    },
                    buffer: 250
                }
            }
        }
Ответить с цитированием
  #4 (permalink)  
Старый 02.03.2012, 22:50
Интересующийся
Отправить личное сообщение для ICEMAN3141592 Посмотреть профиль Найти все сообщения от ICEMAN3141592
 
Регистрация: 18.01.2012
Сообщений: 15

Спасибо большое всем за отзывчивость
miha-ha, я сделал почти как Вы, но у Вас лучше структурирован код (не догадался так переопределить filterBy, пошел через переопределение prototype, а не экземпляра, так что Ваш безусловно лучше, также переопределил cascade)
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2012, 22:55
Интересующийся
Отправить личное сообщение для ICEMAN3141592 Посмотреть профиль Найти все сообщения от ICEMAN3141592
 
Регистрация: 18.01.2012
Сообщений: 15

Чуть не в тему, но быть может кто знает, как сделать для
var triggerField = new Ext.form.TriggerField({
grow: true,
growMax: 800,
width: 350,
autoWidth: true,
fieldLabel: "Поиск",
triggerClass: "x-form-search-trigger",
enableKeyEvents: true
});
tbar: {
items: [
{
xtype: "tbtext",
text: "Поиск"
},
{
xtype: "tbspacer"
},
triggerField
]
}
чтобы текстовое поле расширялось по длине tbar, а не при фиксированной длине в 350 ?
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как использовать innerText yvarvara Общие вопросы Javascript 29 09.11.2009 05:54
Как заставить браузер использовать закэшированное изображение? fog Общие вопросы Javascript 5 13.08.2009 15:40
Как изменить скрипт, что бы им его можно было использовать для нужной страницы Nick50_70 Общие вопросы Javascript 0 28.04.2009 23:30
Как поменять местами элементы в дереве элемента родителя? rar11 Events/DOM/Window 8 01.04.2009 18:53
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 16:01