jqgrid-parmNames和jsonReader的使用,以及json的返回格式
- prmNames : {
- page:"page", // 表示請求頁碼的引數名稱
- rows:"rows", // 表示請求行數的引數名稱
- sort: "sidx", // 表示用於排序的列名的引數名稱
- order: "sord", // 表示採用的排序方式的引數名稱
- search:"_search", // 表示是否是搜尋請求的引數名稱
- nd:"nd", // 表示已經發送請求的次數的引數名稱
- id:"id", // 表示當在編輯資料模組中傳送資料時,使用的id的名稱
-
oper:"oper", // operation引數名稱(我暫時還沒用到)
- editoper:"edit", // 當在edit模式中提交資料時,操作的名稱
- addoper:"add", // 當在add模式中提交資料時,操作的名稱
- deloper:"del", // 當在delete模式中提交資料時,操作的名稱
- subgridid:"id", // 當點選以載入資料到子表時,傳遞的資料名稱
- npage: null,
- totalrows:"totalrows"// 表示需從Server得到總共多少行資料的引數名稱,參見jqGrid選項中的rowTotal
- }
可以通過這個選項來自定義當向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資料。其預設值為:
- jsonReader : {
- root: "rows", // json中代表實際模型資料的入口
- page: "page", // json中代表當前頁碼的資料
- total: "total", // json中代表頁碼總數的資料
- records: "records", // json中代表資料行總數的資料
-
repeatitems: true, // 如果設為false,則jqGrid在解析json時,會根據name來搜尋對應的資料元素(即可以json中元素可以不按順序);而所使用的name是來自於colModel中的name設定。
- cell: "cell",
- id: "id",
- userdata: "userdata",
- subgrid: {
- root:"rows",
- repeatitems: true,
- cell:"cell"
- }
- }
可以這樣理解,prmNames設定瞭如何將Grid所需要的引數傳給Server,而jsonReader設定瞭如何去解析從Server端傳回來的json資料。如果沒有設定jsonReader的話,jqGrid將會根據預設的設定來解析json資料,並顯示在表格裡。但如果傳回來的json資料,不太符合預設設定(比如內部的結構名不太一樣),那麼就有必要修改這一設定。比如:
- jsonReader: {
- root:"gridModel",
- page: "page",
- total: "total",
- records: "record",
- repeatitems : false
- }
注1:據其他網友的文章,如果設定repeatitems為false,不但資料可以亂序,而且不用每個資料元素都要具備,用到哪個找到哪個就可以了。實驗卻是如此。
注2:cell、id在repeatitems為true時可以用到,即每一個記錄是由一對id和cell組合而成,即可以適用另一種json結構。援引文件中的例子:
repeatitems為true時:
- jQuery("#gridid").jqGrid({
- ...
- jsonReader : {
- root:"invdata",
- page: "currpage",
- total: "totalpages",
- records: "totalrecords"
- },
- ...
- });
json結構為:
- {
- "totalpages": "xxx",
- "currpage": "yyy",
- "totalrecords": "zzz",
- "invdata" : [
- {"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, // cell中不需要各列的name,只要值就OK了,但是需要保持對應
- {"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
- ...
- ]
- }
repeatitems為false時:
- jQuery("#gridid").jqGrid({
- ...
- jsonReader : {
- root:"invdata",
- page: "currpage",
- total: "totalpages",
- records: "totalrecords",
- repeatitems: false,
- id: "0"
- },
- ...
- });
json結構為:
- {
- "totalpages" : "xxx",
- "currpage" : "yyy",
- "totalrecords" : "zzz",
- "invdata" : [
- {"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"}, // 資料中需要各列的name,但是可以不按列的順序
- {"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},
- ...
- ]
- }
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等(具體參見文件)。