1

我有一个用例,我想让 jqGrid 为特定列显示一些原始 JSON。我从服务器发送了以下 JSON:

{"items":[
    {
        "code":"ABC123",
        "description":"",
        "custom_data":{"items":[
            {"prop1":"val1","prop2":"val2"},
            {"prop1":"val3","prop2":"val4"}
        ]}
    },
    {"code":"ABC124","description":"","custom_data":[]},
    ...,
]}

和这样的 jqGrid 配置:

{
url:'/api/somewhere',
datatype: "json",
jsonReader : {
    root:"items",
    repeatitems: false,
    id: "code"
},
colNames:['Code',
          'Description',
          'Data',],
colModel:[
    {   
            name:'code', index:'code', width:100, hidden:false, 
        edittype:'text', 
        editable: true, 
        editrules:{required:true, edithidden:true}, 
        editoptions: {readonly:false}
    },
    {   
            name:'description', 
            index:'description', 
            width:250, 
            editable:true, 
            edittype:'text', 
            editrules:{required:true} 
        },
    {
    name:'custom_data',
    index:'custom_data', 
    width:100, 
    hidden:true, 
    sortable:false, 
    editable:true, 
    edittype:'text', 
    editrules:{required:false, edithidden:true}
    },
],
    ...,

网格显示 OK,但 custom_data 列显示为 [object Object]。我需要的是它显示原始 JSON 字符串,我尝试使用 loadComplete 事件在每个行对象的 custom_data 对象上调用 JSON.stringify,但这不起作用。无论如何,我需要在 GET 之后进行一些数据操作,因为我想从 custom_data 对象中删除空值。

我的用户很乐意阅读和编辑原始 JSON,因此我还需要添加/编辑表单来接受原始 JSON,然后将其发布。

我不确定我是否只是使用错误的事件将对象转换回字符串,或者是否还有其他事情发生。

4

1 回答 1

1

您可以做的是为"custom_data"列使用自定义格式化程序

formatter: function (cellValue, options, rawData) {
    return cellValue.items ? JSON.stringify(cellValue.items) : "";
}

我更改了列的演示 hidden属性以查看数据"custom_data"true

在此处输入图像描述

此外,您可以考虑使用userdata而不是隐藏列来保存其他自定义数据。我建议您另外阅读答案,该答案不仅显示了如何使用userdata,还显示了如何在表单子网格中显示其他数据。

于 2013-03-18T17:59:34.530 回答