使用ExtJs的同志們必定知道GridPanel哈~神器通常,很是方便的顯示錶格類型的數據,例如神馬用戶列表、產品列表、銷售單列表、XXXX列表等。從數據庫中查詢所需的數據,以列表的形式顯示出來,咱們理應想到對這種數據實現搜索。
搜索最簡單的方法就是reload那個與GridPanel關聯的store,將搜索結果存進去,可是最初實現的搜索都把原來GridPanel的那個分頁功能給破壞掉了。
緣由:
給store從新載入數據後,PagingToolbar不起做用了,由於ExtJs默認實現的是服務器端分頁,即發送帶有start、limit參數的請求,經過sql語句進行分頁(記得本地分頁也是能夠實現的,待整理)。
解決方法:
利用store的「beforeload」事件和baseParams屬性。beforeload在store載入數據以前觸發,所謂的baseParams,是store每次HTTP請求都會帶上的參數,原本它是一個對象的形式,請求時會轉化爲參數的字符串。
例子:
- var se_period;
- var se_subject;
- var se_starttime;
- var se_endtime;
- var subsidiaryStore = new Ext.data.JsonStore({
- fields: ["date", "voucherNo", "explanation", "debit", "credit"],
- url: 'subsidiaryAction!getSubsidiary.action',
- totalProperty: 'sum',
- root: 'subsidiary',
- listeners: {
- "beforeload": function(store) {
- store.baseParams = {
- starttime: se_starttime,
- endtime: se_endtime,
- subject: se_subject,
- period: se_period
- }
- }
- }
- });
- buttons: [{
- text: '載入',
- handler: function() {
- se_period = searchPanel.findById('se_period').getValue();
- se_subject = searchPanel.findById('se_subject').getValue();
- se_starttime = searchPanel.findById('se_starttime').getValue();
- se_endtime = searchPanel.findById('se_endtime').getValue();
- subsidiaryStore.load({
- params: {
- start: 0,
- limit: pageSize
- }
- });
- }
- }]
這樣在store載入數據時,就會同時提交查詢條件啦,後臺正常獲取那些參數,進行一下判斷,查詢條件爲空時分頁取全部數據就能夠啦,嗷yeah~