J'ai un magasin de grille Ext JS avec autosave
défini sur false
.
Je veux effacer UNIQUEMENT le magasin local, sans affecter/supprimer les enregistrements du serveur.
Si j'essaye store.removeAll()
, alors quand la prochaine écriture de magasin se produit, tous les enregistrements sont supprimés.
Comment appeler store.removeAll
avec effacement de toutes les modifications en attente après?
Store.loadData([],false);
Cette instruction supprime le cache local et n'envoie pas les modifications côté serveur
Le removeAll a un paramètre silencieux qui peut être utilisé pour effacer des enregistrements plutôt que de les supprimer du serveur:
http://docs.sencha.com/extjs/3.4.0/#!/api/Ext.data.Store-method-removeAll
gridPanel.store.removeAll(true);
D'après les commentaires du code:
if (silent !== true) { // <-- prevents write-actions when we just want to clear a store.
this.fireEvent('clear', this, items);
}
Si vous souhaitez ensuite mettre à jour manuellement un GridPanel pour effacer toutes les lignes que vous devez appeler:
gridPanel.view.refresh();
Pour ExtJS 4.1, cela effacera le cache du tampon (données prélues), donc la prochaine fois que vous chargerez (ou loadPage), store rechargera les pages à partir de zéro:
store.pageMap.clear();
ce qui était auparavant fait comme:
store.prefetchData.clear();
Ok, d'après ce que je comprends, vous voulez ignorer les modifications apportées au magasin local et ne pas l'envoyer côté serveur. Avez-vous essayé d'utiliser:
myStore.rejectChanges();
Cette méthode efface toutes les modifications en attente sur tous les enregistrements modifiés. Cela rejettera toutes les modifications en attente.