2016-11-19 43 views
3
{ 
    "InventoryId": "51", 
    "AssetID": "23", 
    "FieldData": [ 
     { 
      "Field": "Field 1" 
     }, 
     { 
      "Field": "Field 2" 
     }, 
     { 
      "Field": "Field 3" 
     }, 
     { 
      "Field": "Field 4" 
     } 
    ] 
} 

這是我的JSON數據的一部分。我怎樣才能將這些數據綁定到JQgrid?我需要 網格在以下結構如何將嵌套JSON綁定到同一行中的Jqgrid

AssetID | InventoryId | Field1 | Field 2 | Field 3 | Field 4 
============================================================ 
     |    |  |   |   | 
     |    |  |   |   | 
+0

字段數(FieldData.length')是固定的(4)還是可變的?您可以使用哪個版本的jqGrid(可以使用)以及從哪個版本的jqGrid([免費jqGrid](https://github.com/free-jqgrid/jqGrid),商業版[Guriddo jqGrid JS](http:// guriddo) net /?page_id = 103334)或版本<= 4.7中的舊jqGrid)? – Oleg

+0

沒有字段的長度不固定,這就是爲什麼我把它列入清單。即時通訊使用jqgrid版本4.3.3。它是我使用的免費版本 – user2838738

+0

是否存在一個原因*爲什麼*您使用復古版本4.3.3?它於4.5年前發佈(2012年5月31日)。現在是網絡瀏覽器的時代:IE9,Firefox 10,Chrome 19.你是否相信Chrome 54,Firexox 50,Microsoft Edge或IE11的復古版本已經夠用了?關於你的主要問題:你應該更明確地制定要求。你知道jqGrid有'colModel',需要填充來創建網格。因此,必須首先分析輸入數據以爲網格生成「colModel」。您只包含*一項*數據。您應該更詳細地描述輸入數據 – Oleg

回答

1

一種具有產生在形式jsonmap: "FieldData.0.Field"jsonmap: "FieldData.1.Field"jsonmap: "FieldData.2.Field"colModel元件與jsonmap

var mydata = [ 
     ... 
    ], 
    myColModel = [ 
     { name: "AssetID", label: "Asset ID", key: true, 
      width: 70, template: "integer", frozen: true }, 
     { name: "InventoryId", label: "Inventory Id", 
      width: 90, template: "integer", frozen: true } 
    ]; 

for (i = 0; i < mydata[0].FieldData.length; i++) { 
    myColModel.push({ 
     name: "field" + (i + 1), 
     label: "Field " + (i + 1), 
     jsonmap: "FieldData." + i + ".Field" 
    }); 
} 

$("#grid").jqGrid({ 
    data: mydata, 
    colModel: myColModel, 
    ... 
}); 

相應演示是https://jsfiddle.net/OlegKi/ga9m44wm/

可以使用回調函數作爲jsonmap的值。例如人們可以使用

jsonmap: function (item) { 
    return item.FieldData[0].Field; 
} 

爲第一列,

jsonmap: function (item) { 
    return item.FieldData[1].Field; 
} 

用於第二列等。動態生成的相應功能的colModel可以使用封jsonmap屬性:

for (i = 0; i < mydata[0].FieldData.length; i++) { 
    myColModel.push({ 
     name: "field" + (i + 1), 
     label: "Field " + (i + 1), 
     jsonmap: (function (index) { 
      return function (item) { 
       return item.FieldData[index].Field; 
      } 
     })(i) 
    }); 
} 

https://jsfiddle.net/OlegKi/ga9m44wm/1/

有一些額外的重要的事情,其中​​之一在從服務器加載數據的情況下,跟隨和使用loadonce: true選項。額外的選項,應該使用哪個選項取決於您使用的jqGrid的版本,以及您使用的jqGrid的分支。我在我的演示中使用了free jqGrid 4.13.5,這是我從2014年底開始開發的jqGrid的分支。由於您仍然使用復古版本4.3.3,我試圖向您提供代碼,該代碼只使用最舊的功能jqGrid的。