Ok, je suis presque prêt à m'arracher les cheveux. Je charge un jqGrid avec des données JSON mais avec "loadonce" défini sur true, pour le garder local. Quand je montre juste le contenu par défaut des colonnes, le tri fonctionne très bien, mais ce dont j'ai besoin, c'est que certaines colonnes utilisent les informations d'une autre colonne pour modifier ce qui est affiché. Par exemple, au lieu d'avoir une colonne "device" et une colonne "model", je veux afficher les deux sous une colonne, comme ce "device-model", et j'utilise un formateur personnalisé pour cela.Le tri des données locales jqGrid perd de l'information
Le problème est, dans ce cas, lorsque je trier, je perds l'information "modèle" et il devient "indéfini". Voici fait partie de mon code:
mdlTable = tableWrap.jqGrid({
url: loadURL,
datatype: 'json',
colNames: ['ID', 'Device', 'Description', 'IP', 'Model'],
colModel: [
{name:'id', index:'id', hidden:true, key:true},
{name:'device', index:'device', width:192,
formatter:function(value, options, rData){
var str = "<a href='/administration/mdl/vwDevice.aspx?device_id=";
str += rData[0] + "' target='_blank'>" + value;
if ('' != rData[4]) str += " - " + rData[4];
str += "</a>";
return str;
}
},
{name:'desc', index:'desc', width:256, sortable:false},
{name:'ip', index:'ip', width:96},
{name:'model', index:'model', hidden:true}
],
sortname: 'id',
viewrecords: true,
loadonce: true,
viewsortcols: [true,'vertical',true],
gridview: true,
ignoreCase: true
})
.navGrid('#deviceList_footer', {edit:false, add:false, del:false, cloneToTop:true});
Comme vous pouvez le voir, je cache la colonne de modèle, et « déplacer » cette information sur la colonne de l'appareil, car c'est là, il est supposé être montré. Tout va bien en charge, mais dès que je fais le tri, ou que je recherche et rafraîchit la vue, la "copie" des données est perdue pour une raison quelconque. Si je montre la colonne du modèle, l'information reste juste très bien, c'est juste la colonne du périphérique qui obtient la valeur "indéfinie".
J'ai essayé de déclencher "reloadGrid", n'aide pas. J'ai aussi essayé d'ajouter la fonction Unformat mais je ne suis pas sûr de ce que je peux faire là-bas. Je viens juste de retourner un $ (cellobject) .html() - cela ne fonctionnait pas évidemment.
Edit: Ajout d'échantillons de données JSON
{ "rows" : [{
"id" : "181",
"cell" : ["181", "Router A", "some description", "55.444.33.222", "Model 1"]
}, {
"id" : "291",
"cell" : ["291", "Router B", "some description", "55.333.22.444", "Model 2"]
}, {
"id" : "1346",
"cell" : ["1346", "Router C", "some description", "55.111.44.333", "Model 3"]
}, {
"id" : "1999",
"cell" : ["1999", "Router D", "some description", "55.222.11.000", "Model 4"]
}
]}
Pourriez-vous inclure des données JSON de test pouvant être utilisées pour reproduire le problème? – Oleg
Ajout de données de test JSON – ilia