一个JSON Store,默认查询全部都没问题
一开始是
store.load({params:{start:0,limit:10}});
加了个条件,
store.load({params:{start:0,limit:10,name:'xxxx'}});
可以返回查询结果
但是我点下页下页、显示的结果不是加了name条件的,而是全面全部的,等于tbar根本没保存住我后面输入的options
请问怎么解决
[b]问题补充:[/b]
dayang2001911 (初级程序员) 2008-11-08
我用了你的代码,还是不可以,其实我之前页写过,但是也不可以
我看了ext的源代码
doLoad=function(start){
var o = {}, pn = this.paramNames;
o[pn.start] = start;
o[pn.limit] = this.pageSize;
if(this.fireEvent('beforechange', this, o) !== false){
this.store.load({params:o});
}
};
tbar执行的doLoad方法,我发现这里他永远只读取start limit2个参数
o是局部变量,我在beforechange事件里面修改了,也无法同步o
最后我只好修改prototype
Ext.PagingToolbar.prototype.doLoad=function(start){
var o = {}, pn = this.paramNames;
o[pn.start] = start;
o[pn.limit] = this.pageSize;
Ext.apply(o,{name:Ext.getCmp('name').getValue()}); // 强制
if(this.fireEvent('beforechange', this, o) !== false){
this.store.load({params:o});
}
};
这样就无问题了
[b]问题补充:[/b]
我用的EXTJS 2.2的
不知道你是什么版本,我怀疑是版本问题 code错误
[b]问题补充:[/b]
store的load方法说明了会记住最后的参数 我打印看了,lastOptions的确是正确的
但是看了tbar的doLoad,根本不是去引用store.lastOptions,而是只用start limit
希望是我错误
[b]问题补充:[/b]
晚上再想想,我觉得beforeload应该是可以的
仔细看了代码,发现自己apply
错误了 Ext.apply(thiz.baseParams, {name:Ext.getCmp('name').getValue()}); 我写成了
Ext.apply(thiz.baseParams, Ext.getCmp('name').getValue());
我对ext也不是很熟,看了你的问题后,我比对了一下我们项目中类似的应用,我觉着可能还是因为你在点击分页中还是没有把name传入到store中的url处理查询的方法中。
我把我们代码实现过程大致写一下:
var resultGrid = new xg.GridPanel({
id:'resultlist-grid',
store: store,
...
bbar: new Ext.PagingToolbar({
store: store,
pageSize: Ext.page.pageSize,
displayInfo: true
})
});
然后定义了个查询的formpanel frm
增加一个beforeload事件,在'beforeload'发生的时候把form中的参数传入到store的url中
store.on('beforeload', function(thiz,options) {
Ext.apply(thiz.baseParams, frm.getValues());
});
store.load(getParam());
这样,点击下一页的时候没有出现丢失查询参数的问题。
我不是用的2.2,用的2.0或2.1的