日期:2014-05-16  浏览次数:20436 次

ExtJS中Store注册beforeload监听事件重新加载grid的方法

ExtJS中Store注册beforeload监听事件重新加载grid的方法,用于条件查询 如果我们使用条件查询过滤表格中的数据,而请求的是同一个URL,只是根据传入的参数不同而得到不同结果集的情况下,我们可以使用Store的addListener方法注册一个beforeload事件,在请求前注入参数:

grid.getStore().addListener({
?beforeload:function(store,records,options){
??store.baseParams = {
???query:'true',
???name:name? //name为之前定义的变量
??};
?}
});要显示全部的话,可以重新传入不同的参数,让后台根据参数进行不同的处理:

grid.getStore().addListener({
?beforeload:function(store,records,options){
??store.baseParams = {
???????? query:'false',
?????? ??name:name
??? ?};
??? }
});


先上核心代码,恍然大悟的直接去修改代码吧!

store.on('beforeload', function (store, options) {

??????? var new_params = { name: Ext.getCmp('search').getValue() };
??????? Ext.apply(store.proxy.extraParams, new_params);
??????? // alert('beforeload');
??? });

?

?

在Ext 3 中的

store.on('beforeload', function () {
??????????? store.baseParams = {
??????????????? name: '5555555',
??????????????? intss: '666666666'
??????????? };
??????? });

已经不适合与ext4 系列了。

?

下面给出完整的代码。原理很简单,将搜索条件放在store的baseParams中,每次加载都赋值。

只是需要强制赋值,因为默认的pagetoolbar只会把start、limit、page、sort、dir传递给store。

var store = new Ext.data.Store({
?????? pageSize: GridPageSize,
?????? model: 'Master',
?????? autoLoad: false,
?????? proxy: {
?????????? type: 'ajax',
?????????? url: '/master/GetMasterData',
?????????? reader: {
?????????????? type: 'json',
?????????????? root: 'data',
?????????????? totalProperty: 'totalCount'
?????????? }
?????? },
?????? fields: [
?????????? { name: 'Id' },
?????????? { name: 'Master_Name' }
?????????

?????? //排序
?????? sorters: [{
?????????? property: 'Master_Name',
?????????? direction: 'DESC'
?????