Как добиться живого поиска/фильтрации по нескольким полям в сетке с помощью Ext.Js?

Я сделал живой поиск по сетке. он ищет на основе того, в каком столбце я упомянул код фильтра. Но мне нужно фильтровать записи сетки на основе поиска по нескольким столбцам. В приведенном ниже коде выполняется поиск только в столбце имени, поскольку в коде фильтра упоминается только имя. Я не понимаю, как выполнить поиск по нескольким столбцам? Может ли кто-нибудь сказать мне, как достичь? очень ценится. Спасибо .

Код сетки здесь:

{
                xtype: 'gridpanel',
                flex: 2,
                hidden: false,
                store: store,
                loadMask: true,
                id: 'grid',
                columns: [
                    {id:'id',header: 'ID', width: 100, sortable: true, dataIndex: 'id'},
                    {header: 'Name', width: 150, dataIndex: 'name'},
                    {header: 'Position', width: 150, dataIndex: 'position'},
                    {header: 'Ambition', width: 250, dataIndex: 'ambition'}                    
                ],
                stripeRows: true,               
                title:'Straw Hats Crew',  
            },

Текст liveSearch меняется даже здесь:

onTextFieldChange: function(field, newValue, oldValue, options){
        var grid = Ext.getCmp('grid');
        if(newValue==''){
            grid.store.clearFilter();
        }
        else {
            grid.store.clearFilter();
            grid.store.load().filter([
                {id: 'name', property: "name", value: newValue, anyMatch: true}
            ]);            
        }
    },

person Ramesh Lamani    schedule 09.04.2013    source источник
comment
Используемый вами метод фильтра принимает массив в качестве аргумента. Вы можете добавить объект для каждого столбца, по которому хотите фильтровать. Вы хотите сделать ИЛИ вместо И? Это проблема?   -  person wantok    schedule 09.04.2013
comment
Привет, спасибо за ваш ответ. Мне нужно выполнить операцию ИЛИ. означает, что однажды, если я дал какой-то текст в текстовом поле, на основе значения текстового поля мне нужно отфильтровать связанные записи из всех столбцов. Не подскажете, как добиться? Прямо сейчас в приведенном выше коде выполняется фильтрация только по имени столбца.   -  person Ramesh Lamani    schedule 09.04.2013


Ответы (1)


Что-то вроде этого должно работать. Вы можете указать произвольную функцию фильтра, которая может проверять все поля в вашей модели.

onTextFieldChange: function(field, newValue, oldValue, options){
    var grid = Ext.getCmp('grid');
    grid.store.clearFilter();

    if (newValue) {
        var matcher = new RegExp(Ext.String.escapeRegex(newValue), "i");
        grid.store.filter({
            filterFn: function(record) {
                return matcher.test(record.get('id')) ||
                    matcher.test(record.get('name')) ||
                    matcher.test(record.get('position')) ||
                    matcher.test(record.get('ambition'));
            }
        });
    }
}
person wantok    schedule 09.04.2013
comment
этот вызов удаленного магазина мне нужен для поиска в локальном магазине - person AtmiyaDas2014; 05.09.2014