2011-12-21 5 views
1

После того, как пользователь редактирует данные в jqGrid, я хотел бы вернуть форматированную строку JSON обратно на сервер, который будет использоваться. Ниже приведен пример того, что сервер ожидает получить:Сериализация данных редактирования jqGrid для JSON

{ 
    "aptitudeArrayList":[ 
    { 
     "skill":"VITS", 
     "value":2, 
     "id":2, 
     "color":"RED" 
    }, 
    { 
     "skill":"GBFM", 
     "value":6, 
     "id":1, 
     "color":"GREEN" 
    }, 
    { 
     "skill":"JSON", 
     "value":4, 
     "id":3, 
     "color":"RED" 
    }, 
    { 
     "skill":"CASTLEROCK", 
     "value":7, 
     "id":4, 
     "color":"RED" 
    } 
    ], 
    "cell":12412, 
    "line":"FIRST_LINE", 
    "name":"Barop", 
    "id":1, 
    "region":"The end", 
    "available":true 
} 

Вот отрезок моей ColModel:

... 
{ 
    name:'cell', 
    label:'Cell #', 
    width:80, 
    align:'center', 
    editable:true, 
    editrules:{required:true, integer:true}, 
    editoptions:{size:10, maxlength:10} 
}, 
{ 
    name:'available', 
    label:'Available', 
    formatter:'checkbox', 
    width:46, 
    align:'center', 
    editable:true, 
    edittype:'checkbox', 
    editoptions:{value:"true:false"} 
}, 
{ 
    name:"vits.value", 
    label:'VITS', 
    width:300, 
    align:'center', 
    editable:true, 
    jsonmap:"aptitudeArrayList.0.value" 
}, 
{ 
    name:"vits.color", 
    editable:true, 
    jsonmap:"aptitudeArrayList.0.color" 
} 
... 

Вот опции редактирования: (я закомментирована POSTDATA как его не необходимо как сейчас)

var editOptions = { 
    onclickSubmit:function (params, postdata) { 
     params.url = URL + '/'; //+ postdata.id; 
    } 
}; 

После редактирования называется, данные передаются в эту функцию:

$.extend($.jgrid.edit, { 
    closeAfterEdit:true, 
    closeAfterAdd:true, 
    ajaxEditOptions:{ contentType:"application/json" }, 
    mtype:'PUT', 
    serializeEditData:function (data) { 
     delete data.oper; 
     return JSON.stringify(data); 
    } 
}); 

Неадекватное выше код возвращает этот JSON:

{ 
    "id":"1", 
    "name":"Barop", 
    "region":"The end", 
    "line":"FIRST_LINE", 
    "cell":"12412", 
    "available":"true", 
    "vits.value":"2", 
    "vits.color":"RED" 
    ... 
} 

Когда я присоединить отладчик я считаю, что data содержит: dataObject { id="1", name="Barop", region="The end", ... vits.value="2", vits.color="RED"} Кажется, он получает ключи от атрибута name в jqGrid.

Как я могу сериализовать свои данные в формате, который требуется серверу?

ответ

2

Самый простой способ решить вашу проблему, по-моему, является модификацией используемого вами serializeEditData. Это может быть примерно следующей

serializeEditData: function (data) { 
    return JSON.stringify({ 
     id: parseInt(data.id, 10), 
     name: data.name, 
     line: data.line, 
     cell: parseInt(data.cell, 10), 
     available: data.available === 'true', 
     aptitudeArrayList: [ 
      value: data.value, 
      color: data.color 
     ] 
    }); 
} 

Кроме того, я рекомендую вам лучше не использовать очки или в name собственности любого другого meta-characters. Либо вы можете просто переименовать name: "vits.value" в name: "value" или использовать дополнительные index свойству

name: "value", 
index: "vits.value", 
jsonmap: "aptitudeArrayList.0.value" 
+0

Это именно то, что мне было нужно, спасибо! Чтение ваших ответов по другим вопросам очень помогло мне. – Jaym

+0

@Jaym: Добро пожаловать! Я рад прочитать, что мои другие ответы могут помочь вам. – Oleg

Смежные вопросы