0

我正在尝试使用分页从 ExtJS 创建网格数据视图。
实际上,当我创建一个简单的数据网格时没有问题。
然后我想使用 Ext Form 创建一个“过滤/搜索”功能。
它只适用于第一页。这是我下面的分机代码:

var winFilter = Ext.create('widget.window',{
title   : 'Filter',
width  : 400,
height : 200,
modal  : true,
closeAction    : 'hide',
items  : frmFilter,
layout : 'fit',
bodyPadding: 5,
buttons:[
{
    text    : 'Filter',
    handler: function(btn){
        var win = btn.up('window');
        var form = win.down('form');
        tempProductID = form.getForm().findField('Product_ID').getSubmitValue();
        tempDescription = form.getForm().findField('Description').getSubmitValue();
        store.load({
            params: {
                start: 0,
                limit: itemsPerPage,
                productid: form.getForm().findField('Product_ID').getSubmitValue(),
                description: form.getForm().findField('Description').getSubmitValue()
            }
        });
        winFilter.hide();
    }
},
{
    text    : 'Close',
        handler: function(){
        winFilter.hide();
    }
}
]});

对于下一页,我的 JSON 返回所有数据,而不使用我之前使用的过滤值(产品 ID 和描述)。
请如果有任何建议

谢谢芽。

4

1 回答 1

1

params(当用作load方法的参数时)只应用一次。如果要将这些参数应用于每个请求,则必须修改proxy extraParams属性:

Ext.apply(store.proxy.extraParams, {
    productid: form.getForm().findField('Product_ID').getSubmitValue(),
    description: form.getForm().findField('Description').getSubmitValue()
}, {});
store.load();

否则,您可以使用存储过滤方法(store.remoteFilter应设置为 true):

store.filter([
    {property: "productid", value: form.getForm().findField('Product_ID').getSubmitValue()},
    {property: "description", value: form.getForm().findField('Description').getSubmitValue()
]);

但请注意,filter使用方法时,请求 url 的过滤器部分具有不同的形式。在这种情况下,过滤器部分看起来像?filter=[{'property':'productid','value':2}]&limit=10.... 而当params使用方法时 url 看起来像?productid=2&limit=10.... 因此,当filter使用方法时,后端应该解析filter请求的属性。

于 2013-07-19T10:35:55.313 回答