ExtJs网格远程排序和远程过滤

时间:2015-07-16 15:20:25

标签: sorting extjs filtering extjs4.2 sencha-cmd

我在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 case,它会提前加载我的页面,我有1000页,我不想这样做。

远程过滤,分页,排序工作正常但是当我尝试过滤某些事情时,单独的分类请求也是如此。我怎么能阻止它?

当我尝试过滤一些东西时,有两个请求:

http://127.0.0.1/projektierungen/?_dc=1437058620730&page=1&start=0&limit=10&sort=[ { “属性”: “COM_KOP_Vertriebsprojektnummer”, “方向”: “DESC”}]

http://127.0.0.1/projektierungen/?_dc=1437058620734&page=1&start=0&limit=10&sort=[ { “属性”: “COM_KOP_Vertriebsprojektnummer”, “方向”: “DESC”}]&安培;过滤器= [{ “属性”: “COM_KOP_Vertriebsprojektnummer”, “值”: “2882”}] < / p>

如何停止第一次请求?

我的过滤列代码如下:

{
                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,

                    }
                }
            }

由于这个自动生成的请求,我的观点不正常。过滤后的结果将被此排序请求替换。  请帮助。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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