jqGrid中的嵌套对象

时间:2014-06-05 12:57:19

标签: json jqgrid

我有一个jqGrid处理有嵌套对象的JSON数据。我正在使用jsonmap设置colmodel,它工作正常;但是当我尝试编辑一行时,传递给服务器的JSON只包含jsonmap属性而不是整个对象,所以它无法将JSON映射到Java对象。

JSON看起来像这样:

{'id': 1,
 'name': 'blah',
 'importantData':
     {'importantDataId': 145,
      'importantDataName': 'bleh'}
}

jqGrid colmodel如下所示:

{name:'id', label:'ID', editable: false},
{name:'name', label:'Name', editable: true},
{name:'importantData_name', label:'Important Data', jsonmap: 'importantData.importantDataName', editable: false}

请注意,importantData不可编辑,但必须在网格和表单中显示。

正如我所写,这很好用,我看到“bleh”作为“重要数据”列中的值。 当我点击导航栏网格的编辑按钮时,我看到用当前值编辑数据的表单。 ID未显示(因为它不可编辑),并且importantData显示为“bleh”。我更改了表单中的名称并保存,发送到服务器的JSON如下所示:

{'id': 1,
 'name': 'newName',
 'importantData_name', 'bleh'}

服务器无法解析此JSON,因为它希望接收整个对象importantData或至少其ID。

我已经配置了一个serializeEditData函数来从网格中检索整个对象,并将整个对象或de ID添加到JSON中,但是我无法获取整个importantData对象。有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我所做的是使用jqGrid的serializeEditData方法并将其设置为覆盖importantData_name。 它是这样的:

serializeEditData: function (postData) {
    postData.importantData = myImportantData;
    var data = JSON.stringify(postData, function(key, value) {
        if(key == importantData_name) {
            return undefined;
        }
    }
}

使用此代码,我避免使用" importantData_name"要包含在de JSON中,我将整个对象包含一个新属性" importantData"。 我必须在加载jqGrid时保存整个对象,以便在此时使用它。

希望这有助于其他人。