2014-06-05 4 views
0

J'ai un jqGrid qui travaille avec des données JSON qui ont des objets imbriqués. J'utilise jsonmap pour définir le colmodel et ça marche bien; mais lorsque j'essaie d'éditer une ligne, le JSON transmis au serveur contient uniquement la propriété jsonmap et non l'objet entier, donc il n'est pas capable de mapper le JSON à un objet Java.Objets imbriqués dans jqGrid

Le JSON ressemble à ceci:

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

Le colmodel jqGrid ressemble à ceci:

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

Voir que ASPECT est non modifiable, mais doit être indiqué dans la grille et sous la forme . Comme je l'ai écrit, cela fonctionne bien et je vois "bleh" comme la valeur dans la colonne "Données importantes". Lorsque je clique sur le bouton d'édition de la grille de la barre de navigation, je vois le formulaire pour éditer les données avec les valeurs actuelles. ID n'est pas affiché (car il n'est pas modifiable), et importantData est affiché comme "bleh". Je change le nom sous la forme et enregistrer, le JSON envoyé au serveur ressemble à ceci:

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

Le serveur ne peut pas analyser ce JSON comme il attend de recevoir l'objet entier ou au moins ASPECT son ID .

J'ai configuré une fonction serializeEditData pour extraire l'objet entier de la grille et ajouter au JSON l'objet entier ou de ID, mais je ne peux pas obtenir l'ensemble de l'objet importantData. Une idée?

Merci d'avance!

Répondre

0

Ce que j'ai fait est d'utiliser la méthode serializeEditData du jqGrid et le définir pour écraser le nom_d'important. Il est comme ça:

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

Avec ce code, j'évite « importantData_name » à inclure dans de JSON et j'inclure une nouvelle propriété, « ASPECT », avec tout l'objet. Je dois enregistrer l'ensemble de l'objet lorsque je charge le jqGrid pour l'utiliser à ce stade.

J'espère que cela aidera quelqu'un d'autre.