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处理它。
答案 0 :(得分:1)
所以我无法手动设置初始分页信息。我必须使用商店来设置页面。