【问题标题】:Storing a json array in a hidden column of a jqgrid将 json 数组存储在 jqgrid 的隐藏列中
【发布时间】:2013-01-23 21:58:22
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery json jqgrid


    【解决方案1】:

    隐藏列只是一个具有 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多