ExtJS的store在load的时候,我们有时候会传递参数,比如在前台进行查询操作时,就需要根据前台所输入的查询参数,传递到后台进行查询操作后,再将筛选出来的数据显示到前台,那么store在load的过程中是怎么传递参数的呢,这里通常有两种方法。
当查询form如下时
一:直接在url输入参数
var studentName = Ext.getCmp('studentName').getValue();
var studentNum = Ext.getCmp('studentNum').getValue();
var url = 'studentInfo_selectAcademyStudentInfo.action?'+ 'studentInfo.name='+studentName+
'studentInfo.studentnum=' +studentNum
studentInfoStore.proxy = new Ext.data.HttpProxy({
url : url
});
studentInfoStore.load({
params : {
start : 0,
limit : 10
}
});
这里直接是在url上拼接了要传递的参数,这种方法的好处是,url已经确定,无论怎么分页查询,每次查询都自动传递这些查询参数,但是有几个缺点:1.以url方法传递,会以get方式传值,这样就算是公开了参数,对于需要保密的数据就无法起到隐藏的效果;2.这种方法传值,如果传递的是中文,传到后台很有可能被翻译成乱码,所以如果用该方法传递中文参数,需要进行前后台转码操作。
二:在load的时候 以参数的形式传值
var studentName = Ext.getCmp('studentName').getValue();
var studentNum = Ext.getCmp('studentNum').getValue();
var url = 'studentInfo_selectAcademyStudentInfo.action'
studentInfoStore.proxy = new Ext.data.HttpProxy({
url : url
});
studentInfoStore.load({
params : {
start : 0,
limit : 10,'
studentInfo.name':studentName,'studentInfo.studentnum':studentNum}
});
这里用的是load的传参方法,这种方法的好处是不用担心乱码问题,也不用担心泄露问题,因为这是用post方法传值的,但是有个缺点就是只能传递一次,一旦其他地方这个store在load的时候就无法再传递这些参数了,对于查询翻页就是个问题,因为只能查询出一页,当大于一页时,点击grid中的下一页后,因为无法再次传递这些参数,所以导致查询出错。 综合两种方法,我们最好选用第二种方法,如果是查询方法,遇到翻页的情况,我们再可以加上下面的方法
studentInfoStore.on('beforeload', function (store, options) {
store.baseParams = {
'studentInfo.Name' : studentName,
'studentInfo.studentnum' : studentNum };
});
这个方法的意思是在这个store每次load之前都加载这些原始参数,也就是我们把这些查询条件加入到了store的原始参数中,就跟extjs默认的原始参数start和limit一样。这样每次查询翻页都能加载这些参数。