1. 程式人生 > >jqgrid-parmNames和jsonReader的使用,以及json的返回格式

jqgrid-parmNames和jsonReader的使用,以及json的返回格式

  1. prmNames : {  
  2.     page:"page",    // 表示請求頁碼的引數名稱
  3.     rows:"rows",    // 表示請求行數的引數名稱
  4.     sort: "sidx"// 表示用於排序的列名的引數名稱
  5.     order: "sord"// 表示採用的排序方式的引數名稱
  6.     search:"_search"// 表示是否是搜尋請求的引數名稱
  7.     nd:"nd"// 表示已經發送請求的次數的引數名稱
  8.     id:"id"// 表示當在編輯資料模組中傳送資料時,使用的id的名稱
  9.     oper:"oper",    // operation引數名稱(我暫時還沒用到)
  10.     editoper:"edit"// 當在edit模式中提交資料時,操作的名稱
  11.     addoper:"add"// 當在add模式中提交資料時,操作的名稱
  12.     deloper:"del"// 當在delete模式中提交資料時,操作的名稱
  13.     subgridid:"id"// 當點選以載入資料到子表時,傳遞的資料名稱
  14.     npage: null,   
  15.     totalrows:"totalrows"// 表示需從Server得到總共多少行資料的引數名稱,參見jqGrid選項中的rowTotal
  16. }  

可以通過這個選項來自定義當向Server傳送請求時,預設傳送的引數名稱。
這個引數很重要也很有用,正是通過這個引數,可以方便的改變預設的request的引數,以符合Server端的需要。比如在prmNames中search預設的值為"_search",這在Struts2的Action中不太方便命名成員變數和getter/ setter。因此可以使用 prmNames: {search: 'search'} 來改變這一預設值為"search",這在Struts2的Action物件中就很好設定getter/ setter了,即getSearch()和setSearch()。當然其他名字也是可以的。

1.2 jsonReader選項

jsonReader是jqGrid的一個重要選項,用於設定如何解析從Server端發回來的json資料。其預設值為:

  1. jsonReader : {  
  2.     root: "rows",   // json中代表實際模型資料的入口
  3.     page: "page",   // json中代表當前頁碼的資料
  4.     total: "total"// json中代表頁碼總數的資料
  5.     records: "records"// json中代表資料行總數的資料
  6.     repeatitems: true// 如果設為false,則jqGrid在解析json時,會根據name來搜尋對應的資料元素(即可以json中元素可以不按順序);而所使用的name是來自於colModel中的name設定。
  7.     cell: "cell",  
  8.     id: "id",  
  9.     userdata: "userdata",  
  10.     subgrid: {  
  11.         root:"rows",   
  12.         repeatitems: true,   
  13.         cell:"cell"
  14.     }  
  15. }  

可以這樣理解,prmNames設定瞭如何將Grid所需要的引數傳給Server,而jsonReader設定瞭如何去解析從Server端傳回來的json資料。如果沒有設定jsonReader的話,jqGrid將會根據預設的設定來解析json資料,並顯示在表格裡。但如果傳回來的json資料,不太符合預設設定(比如內部的結構名不太一樣),那麼就有必要修改這一設定。比如:

  1. jsonReader: {  
  2.     root:"gridModel",     
  3.     page: "page",     
  4.     total: "total",  
  5.     records: "record",  
  6.     repeatitems : false
  7. }  

注1:據其他網友的文章,如果設定repeatitems為false,不但資料可以亂序,而且不用每個資料元素都要具備,用到哪個找到哪個就可以了。實驗卻是如此。
注2:cell、id在repeatitems為true時可以用到,即每一個記錄是由一對id和cell組合而成,即可以適用另一種json結構。援引文件中的例子:

repeatitems為true時:

  1. jQuery("#gridid").jqGrid({  
  2.     ...  
  3.     jsonReader : {  
  4.         root:"invdata",  
  5.         page: "currpage",  
  6.         total: "totalpages",  
  7.         records: "totalrecords"
  8.     },  
  9.     ...  
  10. });  

json結構為:

  1. {   
  2.     "totalpages""xxx",   
  3.     "currpage""yyy",  
  4.     "totalrecords""zzz",  
  5.     "invdata" : [  
  6.                  {"id" :"1""cell" :["cell11""cell12""cell13"]},   // cell中不需要各列的name,只要值就OK了,但是需要保持對應
  7.                  {"id" :"2""cell" :["cell21""cell22""cell23"]},  
  8.                  ...  
  9.     ]  
  10. }  

repeatitems為false時:

  1. jQuery("#gridid").jqGrid({  
  2.     ...  
  3.     jsonReader : {  
  4.         root:"invdata",  
  5.         page: "currpage",  
  6.         total: "totalpages",  
  7.         records: "totalrecords",  
  8.         repeatitems: false,  
  9.         id: "0"
  10.     },  
  11.     ...  
  12. });  

json結構為:

  1. {   
  2.     "totalpages" : "xxx",   
  3.     "currpage" : "yyy",  
  4.     "totalrecords" : "zzz",  
  5.     "invdata" : [  
  6.                  {"invid" : "1","invdate":"cell11""amount" :"cell12""tax" :"cell13""total" :"1234""note" :"somenote"}, // 資料中需要各列的name,但是可以不按列的順序
  7.                  {"invid" : "2","invdate":"cell21""amount" :"cell22""tax" :"cell23""total" :"2345""note" :"some note"},  
  8.                  ...  
  9.     ]  
  10. }  

2. colModel的重要選項

和jqGrid一樣colModel也有許多非常重要的選項,在使用搜索、排序等方面都會用到。這裡先只說說最基本的。

  • name:為Grid中的每個列設定唯一的名稱,這是一個必需選項,其中保留字包括subgrid、cb、rn。
  • index:設定排序時所使用的索引名稱,這個index名稱會作為sidx引數(prmNames中設定的)傳遞到Server。
  • label:當jqGrid的colNames選項陣列為空時,為各列指定題頭。如果colNames和此項都為空時,則name選項值會成為題頭。
  • width:設定列的寬度,目前只能接受以px為單位的數值,預設為150。
  • sortable:設定該列是否可以排序,預設為true。
  • search:設定該列是否可以被列為搜尋條件,預設為true。
  • resizable:設定列是否可以變更尺寸,預設為true。
  • hidden:設定此列初始化時是否為隱藏狀態,預設為false。
  • formatter:預設型別或用來格式化該列的自定義函式名。常用預設格式有:integer、date、currency、number等(具體參見文件)。