Extjs中store与分页传递参数问题

   在Extjs中,使用store从服务器断加载数据,我们一般这样定义:

var store = Ext.create('Ext.data.Store',{
model:'User',
proxy:{
type:'ajax',
url:'findUser.action',
reader:{
type:'json'
}
}
});

当我们需要加载数据时,使用store.load()方法,但在实际情况中,我们是需要向后台传递数据,例如,根据用户Id查询该用户的详细信息,这是我们就需要在load的时候,将用户id也传递给后台,我们可以使用:

store.load({
params:{
userId:'123'
}
});

在Extjs的官方文档中,load方法是默认使用HTTP请求的"GET"方法,这样就会出现一个问题,当我们提交的参数有中文字符时,服务器后台就有可能出现乱码,这是因为,tomcat要对get请求的url进行URIEncoding,如何编码格式不一致,就会乱码。Ext对所有的字符统计进行UTF-8编码。

于是我们就可以统一让参数提交通过“POST”方式进行,要实现“POST”提交,我们可以对store中proxy进行如下配置:

var store = Ext.create('Ext.data.Store',{
model:'User',
proxy:{
type:'ajax',
actionMethods:{read:'POST'},
url:'findUser.action',
reader:{
type:'json'
}
}
});

接下来如果使用了分页插件,每次点击上一页,下一页的时候需要向后台传递参数,此时store的load方法是被分页插件自动调用,我们无法通过load将参数传递进去,这时我们可以使用store中proxy中的extraParams属性配置额外参数,我们需要这样调用:

store.on('beforeload',function(){
this.proxy.extraParams = params;
});

为什么要使用beforeload事件,这是因为,在我们点击下一页的时候,会在load之前,触发beforeload事件,此时我们就可以将params参数,赋值给extraParams,传递到后台去了。

你可能感兴趣的:(extjs4)