ExtJs Grid 远程排序和远程过滤

ExtJs Grid Remote Sorting and Remote filtering

我在 ExtJs 4.2 中有一个网格。我需要应用远程排序、远程过滤和分页。所以我的商店看起来像这样:

    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,

                    }
                }
            }

由于这个自动生成的请求,我的视图无法正常工作。由于过滤后的结果被这个排序请求所取代。 请帮忙。

额外的请求不是因为排序而是因为调用 store.clearFilter()。尝试调用抑制事件的 store.clearFilter(true) 可以阻止该额外请求的事件。

为什么当值为空时要清除过滤器?为什么不过滤空值?我几乎遇到了同样的情况,但我认为我的解决方案在不清除任何东西的情况下运行良好。除此之外,我不想知道要过滤哪个商店或硬编码 属性 名称。这是我的过滤器字段:

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'
}]