Scénario de ce que je suis en train de réaliser:Comment modifier les données reçues du serveur avant le traitement par jqGrid
- je récupère des données à partir du serveur
- I boucle les données et ajouter/modifier les valeurs de certains champs
- les données sont en cours d'affichage dans une grille
- l'utilisateur modifie localement les données
- une fois terminé, l'utilisateur soumet la totalité des données de la grille de la serveur
Comment j'ai essayé de le réaliser:
J'ai fait une jqGrid avec loadonce:true
, editurl:'clientArray'
et l'édition en ligne. Dans loadComplete
je boucle les données reçues du serveur et ajoute quelques valeurs. Un bouton externe est utilisé pour obtenir les données de la grille en utilisant .jqGrid('getGridParam','data')
et l'envoyer au serveur.
loadComplete: function(data){
for(var i=0; i<data.rows.length; i++){
var row = data.rows[i];
grid.jqGrid('setRowData', row.id, {
missingData: 'someDefaultValue'
});
}
}
Problème: Les loadComplete
événement se déclenche lorsque l'utilisateur modifie la page de grille ou fait une recherche. Ce qui entraîne le dépassement de toutes les données éditées par le lui. J'ai essayé d'utiliser l'événement beforeProcessing
à la place, mais il ne se déclenche jamais (Edit: Cela n'a pas fonctionné lors du test avec des données locales, mais fonctionne avec loadonce). Je n'ai trouvé aucun autre événement approprié dans le documentation.
J'ai reproduit le scénario dans la démo this. Comment dois-je modifier correctement les données après l'avoir reçu du serveur et laisser l'utilisateur éditer localement, sans outrepasser ses modifications quand il change la page ou fait une recherche?
Note: J'utilise sans jqGrid 4,14