J'ai écrit récemment une réponse à la question "jqGrid l'affichage par défaut de message "chargement" lors de la mise à jour d'une table / sur commande de mise à jour". Alors que la rédaction de la réponse, j'ai pensé: pourquoi n'a-t-il les addJSONData() de la fonction pour l'actualisation des données dans la grille au lieu de changer l'URL à l'égard de setGridParam() et rafraîchissant jqGrid données vis à vis de trigger('reloadGrid')? Au début je voulais vous recommandons d'utiliser 'reloadGrid', mais après réflexion sur ce que j'ai compris que je ne suis pas tout à fait sûr de ce que le meilleur moyen est. Au moins, je ne peux pas l'expliquer en deux phrases pourquoi je préfère la seconde. J'ai donc décidé qu'il pourrait être un intéressant sujet de discussion.
Donc, pour être exact: Nous avons une situation typique. Nous avons une page web avec au moins un jqGrid et quelques autres contrôles comme le combo-box (sélectionne), cases à cocher, etc. qui donnent à l'utilisateur des possibilités de modifier la portée de l'information affichée dans un jqGrid. Généralement, on définit des gestionnaire d'événements comme jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
et nous avons besoin de recharger la jqGrid conteneur en fonction de l'utilisateur du choix.
Après la lecture et l'analyse de l'information supplémentaire de la saisie de l'utilisateur, nous pouvons actualiser la jqGrid conteneur de deux façons au moins:
- Faire un appel d'
$.ajax()
manuel puis à l'intérieur de la réussite ou de l'complet de poignée d'$.ajax
appeljQuery.parseJSON()
(oueval
) et ensuite appeler addJSONData fonction de jqGrid. J'ai trouvé beaucoup d'exemples sur stackoverflow.com qui utilisent addJSONData. - Mise à jour de l'url de jqGrid basée sur la saisie de l'utilisateur, réinitialiser les page numéro 1 et éventuellement modifier la légende de la grille. Tous ces éléments peuvent être faits à l'égard de setGridParam(), et éventuellement setCaption() jqGrid méthodes. À la fin de l'appel de la grille trigger('reloadGrid') de la fonction. Pour construire l' url, par la façon dont j'utilise principalement jQuery.param fonction pour être sûre, j'ai tous les paramètres d'url emballé correctement par rapport à encodeURIComponent.
J'aimerais que nous discutons les avantages et les inconvénients des deux façons. J'utilise actuellement la deuxième façon, donc je vais commencer avec des avantages de celui-ci.
On peut dire: j'ai appel de Service Web, convertir les données reçues à l'jqGrid format et appel addJSONData. C'est la raison pour laquelle j'utilise addJSONData méthode!
OK, je vais choisir une autre voie. jqGrid pouvez faire un appel sur le Web directement le Service et remplissez les résultats à l'intérieur de la grille. Il y a beaucoup de jqGrid options qui vous permettent de personnaliser ce processus.
Tout d'abord, on peut supprimer ou renommer les paramètres standard envoyé au serveur à l'égard de la prmNames option de jqGrid ou plus ajouter des paramètres supplémentaires à l'égard de la postData option (voir http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). On peut modifier tous construits paramètres immédiatement avant jqGrid fait la correspondante $.ajax
demande par la définition de la serializeGridData() fonction (une option de plus de jqGrid). De plus, on peut changer chaque $.ajax
paramètre par paramètre le ajaxGridOptions option de jqGrid. J'utilise ajaxGridOptions: {contentType: "application/json"}
par exemple en tant que cadre général de l' $.jgrid.defaults
.
Le ajaxGridOptions option est très puissant. À l'égard de la ajaxGridOptions option, on peut redéfinir tous les paramètres, de l' $.ajax
demande d'envoi par jqGrid, comme d'erreur, complète et beforeSend événements. Je vois potentiellement intéressante pour définir dataFilter événement pour être en mesure de faire une quelconque modification de la ligne de données retournées par le serveur.
Un argument de plus pour l'utilisation du trigger('reloadGrid') moyen est le blocage de jqGrid au cours de l'AJAX traitement de la demande. Je vais surtout utiliser le paramètre loadui: 'block'
pour bloquer jqGrid pendant JSON demande l'envoi au serveur. À l'égard de jQuery plugin blockUI http://malsup.com/jquery/block/ on peut bloquer plus de pièces de page web, comme la grille. Pour ce faire, on peut demander:
jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });
avant d'appeler le trigger('reloadGrid') méthode et jQuery ('#(principal)").débloquer() à l'intérieur de la loadComplete et loadError fonctions. Le loadui option pourrait être réglé sur "disable" dans ce cas.
Et ma dernière remarque: j'ai Surtout utilisé pour créer des jqGrid avec le type de données défini à 'locale' au lieu de 'json' et je voudrais appeler le déclencheur ("changement") la fonction de certains contrôles (l'une des zones de liste modifiables) comme:
jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change')
.
J'ai donc construire l' url le paramètre de jqGrid seulement dans un lieu à l'intérieur de la modifier gérer et de modifier le type de données à 'json' à l'intérieur de l'décrit ci-dessus setGridParam().
Donc je ne vois pas pourquoi la fonction addJSONData() doit être utilisé.
Peut quelqu'un qui utilise addJSONData() fonction m'expliquer les avantages de son utilisation?
Pour être juste je peux ajouter que addJSONData() qui n'existe que dans les anciennes versions de jqGrid comme ayant la plupart des fonctionnalités qui je décris ici. Doit-on remplacer l'utilisation de addJSONData de jqGrid à l'utilisation de setGridParam(), et trigger('reloadGrid')?