web-dev-qa-db-fra.com

Comment effacer le magasin Ext JS sans affecter / supprimer les enregistrements sur le serveur

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?

24
Bdfy
Store.loadData([],false);

Cette instruction supprime le cache local et n'envoie pas les modifications côté serveur

51
Anton

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();
6
geographika

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();
2
PavelHolec

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.

1
Abdel Raoof