3

我有一个从远程 URLjqgrid的响应中获取的设置。JSON我发回的字段之一JSON是一组值。我正在尝试将此数组存储在隐藏列中,以便在选择网格中的元素时可以访问它,但jqgrid正在将我的数组转换为字符串[object Object]

有没有办法说服jqgrid数组保持完整以便可以访问它们,getRowData或者您是否必须在服务器上将数组编码为字符串,然后在客户端对其进行解码?

4

1 回答 1

2

隐藏列只是具有 CSS 样式的列display: none。您不能将对象放在<td>...</td>. 所以对象会通过调用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请参见答案。

于 2013-01-24T07:39:24.520 回答