i crée dojox.grid.datagrid et je remplisse le contenu de la matrice comme sur l'exemple Dernier exemple à la page . Pendant le temps, je modifie la valeur de ce tableau en code. Comment rafraîchir le contenu de cette grille? Comment charger de nouvelles données de la matrice modifiée? P>
6 Réponses :
L'extrait de code suivant peut être utilisé pour mettre à jour la grille: Guide de référence de la grille de données Dogo (Ajout / Suppression des lignes, mise à jour des exemples de données de grille) P> p>
Pour changer de valeurs dans la grille, vous devez modifier la valeur dans le magasin du réseau. Les données de la grille sont liées aux données du magasin et la grille se mettra à jour au besoin.
La clé est donc de comprendre l'API de Data de Dojo et la façon dont les magasins fonctionnent à Dojo. Plutôt que de manipuler les données directement dans la grille, manipulez-la dans le magasin. P>
Idéalement, le magasin est votre matrice que vous manipulez lorsque l'application est exécutée et que vous ne devez pas avoir besoin de synchroniser la matrice à la grille. . Utilisez simplement l'optionFileWriteStore comme titulaire de votre donneur, sauf si cela n'est pas possible. P>
De plus, à l'aide de l'API d'identité DOJO Data Identit le rend très simple à trouver des éléments de la grille si cela est possible. En supposant que vous sachiez quand un élément est mis à jour, supprimé ou modifié dans votre application, vous devriez être en mesure de modifier le magasin de la grille au besoin lorsque l'action se produit. C'est définitivement l'approche préférée. Si vous ne pouvez pas faire cela, vous devrez effectuer une vérification générale et utiliser le rappel ONCOMPLETE pour synchroniser manuellement vos tableaux, ce qui sera très lent et ne sera pas bien écheloire, auquel cas vous pouvez aussi bien créer un nouveau magasin. Ensemble et assignez-le à la grille avec grid.setore (myNewstore) p>
Voici un violon avec une opération de base, mise à jour et Supprimer: http://jsfiddle.net/bc7yt/11/ p>
Ces exemples tirent parti de la déclaration d'une identité lors de la création du magasin. P > mettre à jour un élément exisitng: p> Insérer un nouvel élément: p> store.fetchItemByIdentity({ 'identity' : 'Gaxula', onItem : function (item ) {
if(item == null) {
//Item does not exist
} else {
store.deleteItem(item);
}
}});
Avec cela, je peux mettre à jour une ligne spécifique. Cet exemple est pour un tronc.
(Je suppose que vous avez déjà une grille de travail et que vous voulez changer complètement le magasin de la grille)
Créez un nouveau magasin de données avec votre nouvelle valeur: P>
grid.render();
Modifiez le magasin de votre réseau avec le nouveau: p>
grid.store = dataStore;
rendu: p>
dataStore = new ObjectStore({ objectStore:new Memory({ data: data.items }) });
Cela mettra à jour le magasin de grille et rafraîchra la vue de la grille dans la dernière version de DOJO 1.9
grid.store = store; grid._refresh();
J'ai eu un serveur filtré amélioréGrid, qui était rafraîchissant heureusement en changeant le magasin, et montré dans les autres réponses.
Cependant, j'avais une autre version améliorée qui ne vous rafraîchrait pas lorsqu'un filtre a été appliqué. Cela a peut-être été de faire avec le fait qu'il a été filtré côté client (mais les données provenant de serveur utilisant JSONREST Store), mais je ne connais pas vraiment la cause. Soitway, la solution consistait à rafraîchir avec le code suivant: p> C'est haconiste et étrange, mais si tout échoue ... P> P>