ExtJS 的 store load的传参的两种方法以及注意点

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一样。这样每次查询翻页都能加载这些参数。

你可能感兴趣的:(EXTJS)