2012-11-23 68 views
3

顯示之前從Ajax調用返回的數據我也顯示一些數據,我從服務器接收像這樣jqGrid的修改表

{"rowndx":"0","rows":"25","rowstotal":"100","rowsdata":[ 
["00","DEVICE001","T0_IHOME","1","***","1","10"], 
["01","DEVICE002","NO_DEVICE","1","***","1","10"], 
["02","DEVICE003","NO_DEVICE","0","***","1","10"], 
..... 

JSON對象,我想表顯示接收到的數據之前根據需要進行更改,將單位添加到數字或用單詞替換數字(例如0 - > OFF 1-> ON) 要做到這一點,我已經在ajax選項「成功」中關聯了我的編碼功能。然而,在這種情況下,消息「Loading ...」始終可見,並且不允許其他操作。 我將我的重新編碼過程移動到「完整」ajax選項,這次它似乎工作。 但我不明白我的錯誤是什麼,我不知道我的程序是否可以工作。 這是我的表AJAX配置

url  : "devtbl.json", 
    mtype : "POST", 
    datatype : "json", 
    postData : ...... 

    ajaxGridOptions: { 
     type  : 'post', 
     contentType: 'application/json', 
     async  : false, 
     complete : DEVparse_serverdata, 
     error  : function() { alert('Something bad happened. Stopping');}, 
    }, 

    jsonReader : { 
     root  : "tablerows", 
     page  : "currentpage", 
     total  : "totalpages", 
     records  : "totalrecords", 
     cell  : "", 
     id   : "0", 
     userdata : "userdata", 
     repeatitems : true 
    }, 

和我的編碼功能

function DEVparse_serverdata(js , textStatus) { 

    var jsontablereply = {} ; 
    var rowsxpage_int = parseInt(UB.rowsxpage.DEVtable) ; 
    var jsonreply = jQuery.parseJSON(js.responseText) ; 

    jsontablereply.currentpage = "" + (1 + (parseInt(jsonreply.rowndx)/rowsxpage_int)); 
    jsontablereply.totalpages = "" + parseInt((parseInt(jsonreply.rowstotal) + (rowsxpage_int-1))/rowsxpage_int) ; 
    jsontablereply.totalrecords = jsonreply.rowstotal; 

    jsontablereply.tablerows = [] ; 
    $.each(jsonreply.rowsdata, function(ndx, row) { 
    var rowarray = [] ; 

    rowarray[0] = row[0] ; 
    rowarray[1] = row[1] ; 
    rowarray[2] = row[2] ; 
    rowarray[3] = row[3] ; 
    rowarray[4] = row[4] ; 

    switch (row[2]) { 
     case "NO_DEVICE": 
      rowarray[5] = "***" ; 
      break ; 

     case "T0_IHOME": 
      rowarray[5] = "T=" + row[5] + "°C" ; 
      break ; 
    } 
    jsontablereply.tablerows[ndx] = rowarray ; 
    }) ; // each 

    jQuery("#DEVtbl")[0].addJSONData(jsontablereply); 
} 

(我是用jQuery初學者我的編碼風格是窮人)

+0

你應該開始[「接受」](http://meta.stackexchange.com/a/5235/147495)回答你以前的問題。 – Oleg

+1

您可以使用自定義格式器。 – ffffff01

回答

7

有,你有很多的可能性實施您的要求。

在許多情況下,對於案例0 ->OFF 1-> ON,可以使用預定義的formatter: "select"formatter: "checkbox"

另一種可能性是使用custom formatterunformatter。自定義格式化程序只是回調函數,在構建相應列的單元格的HTML片段時,jqGrid將使用該回調函數。如果你需要一些共同的文本的顯示格式看起來像

formatter: function (cellValue) { return $.jgrid.htmlEncode(cellValue); } 

自定義格式的好處是,你可以包含基於信息不僅來自許多源文本的任何修改,但你可以建立細胞其它(見下文rawData參數)

formatter: function (cellValue, options, rawData, action) { 
    // options is the the object defined as 
    //   {rowId:rowId, colModel:cm, gid:gridId, pos:colpos } 
    // rawData contains the representation of the WHOLE row 
    //   the most problem of the value is that it is in the same 
    //   format as the input data. So if will be array of items 
    //   in your case or if could be XML fragment for the row. 
    //   Additional problem one will have in case of usage of 
    //   loadonce:true. Ath the first load the rawData will be 
    //   array of strings and on later could be named object 
    //   with the properties corresponds to the column names. 
    // action is typically non-important and is 'add' or 'edit' 
} 

例如5個列的自定義格式可以是

formatter: function (cellValue, options, rawData, action) { 
    switch (rawData[2]) { 
    case "NO_DEVICE": 
     return "***"; 
    case "T0_IHOME": 
     return "T=" + $.jgrid.htmlEncode(cellValue) + "°C" ; 
    default: 
     return $.jgrid.htmlEncode(cellValue); 
    } 
} 

還有一個選擇是使用beforeProcessing回調。它大部分與您當前代碼的邏輯很接近。在beforeProcessing回調的內部,您可以在之前對服務器之前的數據returend進行任何修改,數據將由jqGrid進行處理。

+0

感謝Oleg提供的解決方案和明確的解釋。 – user954211

+0

@ user954211:不客氣! – Oleg