Store 每次 reload 会记着上次的参数,比如 params 里有 start limit 则 reload 会保持参数,那么同时用 GridFilters (ext 例子里的)和 pagetoolbar 时,如果一开始就要先 filter,如:
filters =new Ext.Grid.filters({...});
filters.getFilter('assign').setValue(CURRENTUSERID);
filters.getFilter('assign').setActive(true, true);
filters.getFilter('status').setValue(0);
filters.getFilter('status').setActive(true, true);
则要先
config.store = new Ext.data.JsonStore({
url: config.dataSource, //读取数据的url,
root: 'rows',
baseParams:config.baseParams,
totalProperty:'results', //总共的页数
fields: fieldsData
});
config.store.lastOptions={params:{start:0,limit:config.pageSize}};
否则 ajax 请求没有 start limit 参数,因为 fiters 代码用的是 reload,当最开始没有请求分页时,则参数只有 filter 的参数。
filters 源码解析
filters 监控所有它包含的 filter 的事件 (this == filters)
Ext.util.Observable.capture(filter, this.onStateChange, this);
当一个filter 有事件时
this.deferredUpdate.delay(this.updateBuffer); //deferredUpdate == reload
reload: function() {
if (this.local) {
this.grid.store.clearFilter(true);
this.grid.store.filterBy(this.getRecordFilter());
} else {
//多个filter 短时间内连续 更新 ,只要 提取数据一次 !!!!!
this.deferredUpdate.cancel();
var store = this.grid.store;
if (this.toolbar) {
var start = this.toolbar.paramNames.start || 'start';
if (store.lastOptions && store.lastOptions.params && store.lastOptions.params[start]) {
store.lastOptions.params[start] = 0;
}
}
store.reload();
}
},
本文探讨了ExtJS中Grid Filters与分页组件结合使用时的问题,特别是关于如何正确设置Store来确保过滤器和分页能正常工作,避免因参数丢失导致的数据加载错误。
1002

被折叠的 条评论
为什么被折叠?



