Extjs - 分页工具栏:分页不使用服务器代理保留先前的请求(store.load)

时间:2014-09-17 23:25:03

标签: extjs extjs4.2

Extjs 4.2.2

我有一个带有ajax代理的商店,我没有自动加载。它附加到网格,网格有一个分页工具栏。

我允许用户在表单中选择一些选项然后调用store.load( { params:{some params} } );。我从服务器上正确地得到了结果。

如果用户使用分页工具栏,则会发出新请求,而不会使用用于发出上一个请求的参数。

有没有办法让商店按预期加载数据?

我知道我可以在代理上手动设置extraParams,然后在没有参数的情况下调用store.load()。然后,当Paging Toolbar发出请求时,它将使用那些extraParams。

我还重写了store.loadPage()以重建请求/参数,并设置正确的起始大小。

这样做的正确方法是什么?对我来说,预期的功能是如果我更改了查询并且我想要这些结果的下一页,我应该得到这些结果的下一页。没有得到其他一些查询/结果的下一页。

商店示例:

Ext.create( 'Ext.data.Store',{
   storeId:'some id',
   model:'some model',
   autoLoad:false,
   proxy:{
       type:'ajax',
       url:'some url',
       //extraParams: {sticky params},
       limitParam:'rows',
       pageParam:undefined,
       startParam:'start'
   },

    loadPage:function( page, options ){
        //Build the current query
        var o = /*biuld params object*/;

        //Update the page size
        o.start = (page - 1) * this.pageSize;

        if( options ){
            options.params = o;
        }else{
            options = {
                params:o
            };
        }
        //Pass it along to the parent loadPage.
        this.callParent( [page, options] );
    }
});

其实我猜我错了,我不能手动设置extraParams并让分页工作。 他们使用Ext.applyif,如果它们已经存在,它们不会覆盖属性。所以从源头

EXT-ALL-debug.js buildRequest:function(operation){         var me = this,

        params = operation.params = Ext.apply({}, operation.params, me.extraParams),
        request;


    Ext.applyIf(params, me.getParams(operation));




    if (operation.id !== undefined && params[me.idParam] === undefined) {
        params[me.idParam] = operation.id;
    }
    ...

这将获取分页信息。     me.getParams(操作) 而我的params对象上有分页信息。所以我想我要做的就是不自己设置初始分页信息,让Ext处理它。

1 个答案:

答案 0 :(得分:1)

所以我无法手动设置初始分页信息。我必须使用商店来设置页面。