Удаленная сортировка и удаленная фильтрация ExtJs Grid

У меня сетка в ExtJs 4.2. Мне нужно применить удаленную сортировку, фильтрацию remort и разбиение на страницы. Итак, мой магазин выглядит так:

    storeId: 'mainStore',

    pageSize: 10,
    autoLoad: {
        start: 0,
        limit: 10
    },
    autoSync: true,

    remoteSort: 'true', //For Remote Sorting

    sorters: [{
        property: 'COM_KOP_Vertriebsprojektnummer'
        direction: 'ASC'
    }],

    remoteFilter: true, //For Remote Filtering 

    proxy: {
        type: 'rest',
        filterParam: 'filter',
        url: PfalzkomApp.Utilities.urlGetData(),
        headers: {
            'Content-Type': "application/xml"
        },
        reader: {
            type: 'xml',
            record: 'record',
            rootProperty: 'xmlData'
        }

   } 

Я не хочу устанавливать буфер buffered = true, который будет загружать мои страницы заранее, а у меня 1000 страниц, и я не хочу этого делать.

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

два запроса, когда я пытаюсь что-то отфильтровать:

http://127.0.0.1/projektierungen/?_dc=1437058620730&page=1&start=0&limit=10&sort=[ {"property": "COM_KOP_Vertriebsprojektnummer", "direction": "DESC"}]

http://127.0.0.1/projektierungen/?_dc=1437058620734&page=1&start=0&limit=10&sort=[ {"property": "COM_KOP_Vertriebsprojektnummer", "direction": "DESC"}] & filter = [{"property": "COM_KOP_Vertriebsprojektnummer", "value": "2882"}]

Как я могу остановить первый запрос?

Мой код для фильтрации столбца таков:

{
                text: 'Vertriebsprojektnr',
                dataIndex: 'COM_KOP_Vertriebsprojektnummer',
                flex: 1,            
                items    : {
                    xtype:'textfield',
                    flex : 1,
                    margin: 2,
                    enableKeyEvents: true,
                    listeners: {
                        keyup: function() {
                            var store = Ext.getStore('mainStore');
                            store.clearFilter();
                            if (this.value) {
                                //debugger;
                                //debugger;
                                store.filter({
                                    property     : 'COM_KOP_Vertriebsprojektnummer',
                                    value         : this.value,
                                    anyMatch      : true,
                                    caseSensitive : false
                                });

                            }

                        },
                        buffer: 1000,

                    }
                }
            }

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


person Abdul Rehman Yawar Khan    schedule 16.07.2015    source источник
comment
Зачем использовать пользовательский textfield с материалом keyup вместо стандартного фильтр столбца? Например, здесь < / а>?   -  person Greendrake    schedule 17.07.2015


Ответы (2)


Дополнительный запрос отсутствует из-за сортировки, а из-за вызова store.clearFilter(). Попытайтесь вызвать store.clearFilter(true), который подавляет событие, которое может предотвратить этот дополнительный запрос.

person Saki    schedule 17.07.2015
comment
Спасибо за ваше время. Ваше решение сработало. Но теперь я столкнулся с проблемой. Если я напишу что-то в фильтре, скажем, 2882-3, все работает. Теперь, если я удалю его ПОЛНОСТЬЮ с помощью backspace, он не запустит запрос. и, следовательно, последний отфильтрованный результат остается там, пока я не нажму клавишу ввода. Ты знаешь что мне делать? - person Abdul Rehman Yawar Khan; 20.07.2015
comment
Поскольку вы проверяете, что значение пусто, а это в то время, вы не фильтруете и не изменяете свой текущий фильтр. Ответ Саки не дает вам решения, а только говорит вам, почему он позвонил дважды. Вы пробовали мое решение? - person Tarabass; 21.07.2015

Почему вы очищаете фильтры, когда значение пусто? Почему бы не отфильтровать пустое значение? У меня почти такая же ситуация, но я думаю, что мое решение работает хорошо, ничего не очищая. Кроме того, я не хочу знать, какой магазин фильтровать или жестко задавать имя свойства. Вот мое поле фильтра:

Ext.define('Fiddle.form.TextField', {
    extend: 'Ext.form.field.Text',
    alias: 'widget.filterfield',

    emptyText: 'Filter',
    width: '100%',
    cls: 'filter',
    enableKeyEvents: true,
    listeners: {
        keyup: {
            fn: function(field, event, eOpts) {
                this.up('grid').getStore().filter(new Ext.util.Filter({
                    anyMatch: true,
                    disableOnEmpty: true,
                    property: field.up('gridcolumn').dataIndex,
                    value   : field.getValue()
                }));
            },
            buffer: 250
        }
    }
});

А вот объявление представления:

dataIndex: 'company',
text: 'Company',
flex: 1,
items: [{
    xtype: 'filterfield'
}]
person Tarabass    schedule 18.07.2015