我有一个 jqgrid
设置为从远程 URL 的 JSON
响应中获取。我在 JSON
中发回的字段之一是值数组。我试图将这个数组存储在隐藏列中,以便在选择网格中的元素时可以访问它,但是 jqgrid
正在将我的数组转换为字符串 [object Object]
.
有没有办法说服 jqgrid
保持数组完好无损,以便可以使用 getRowData
访问它们,或者您是否必须在服务器上将数组编码为字符串,然后在客户端解码它们?
最佳答案
隐藏列只是一个具有CSS样式的列display: none
.您不能将对象放置在 <td>...</td>
内的 HTML 页面上.所以对象将通过调用toString
自动转换为字符串。方法。
您真正需要的是将对象(例如数组)保存在某处。当用户稍后选择一行网格时回调 onSelectRow
叫做。回调将 rowid 作为参数。所以最好的办法是将你的自定义信息通过rowids保存为字典(对象)。
其中一个选项将发送不在 rows
内的附加信息服务器响应的一部分,但在 userdata
内部反而。例如,您尝试以以下格式发送当前数据
{
"page": 1
"total": 7
"records": 123
"rows": [
{"id": 10, "cell": ["cell11", "cell12", "cell13", [1, 2, 3]]}
{"id": 20, "cell": ["cell11", "cell12", "cell13", [4, 5, 6]]},
...
{"id": 90, "cell": ["cell11", "cell12", "cell13", [9, 8, 7]]}
]
}
您可以修改服务器响应
{
"page": 1
"total": 7
"records": 123
"rows": [
{"id": 10, "cell": ["cell11", "cell12", "cell13", [1, 2, 3]]}
{"id": 20, "cell": ["cell11", "cell12", "cell13", [4, 5, 6]]},
...
{"id": 90, "cell": ["cell11", "cell12", "cell13", [9, 8, 7]]}
],
"userdata": {
"10": [1, 2, 3],
"20": [4, 5, 6],
...
"90": [9, 8, 7]
}
}
如果是 userdata
部分将由内部参数中的 jqGrid 自动保存 userData
(小心使用 JSON 数据中的“userdata”中的大小写和 "userData"
作为参数)。
现在您可以通过以下方式在任何回调中获取自定义数据:
onSelectRow: function (rowid) {
var custom = $(this).jqGrid("getGridParam", "userData");
// custom[rowid] is the data from userdata like [4, 5, 6]
}
如果您无法修改服务器响应,您可以将自定义数据移动到 userdata
beforeProcessing
内部的部分打回来。参见 the answer有关此类代码的示例。
关于javascript - 将 json 数组存储在 jqgrid 的隐藏列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14490172/