`
yiminghe
  • 浏览: 1434002 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ext.data.Store 与 GridFilters

阅读更多

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();
        }
    },
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics