2017-06-21 2 views
1

Lors de l'appel model.erase ({failure ..., success ...}) le modèle est supprimé même lorsque le serveur répond avec un HTTP StatusCode 500. Le L'écouteur d'échec est déclenché correctement mais je m'attendrais à ce que le modèle ne soit pas détruit alors. Je peux voir qu'il est détruit parce qu'il est retiré du magasin.Sencha extjs model.erase supprime le modèle même lorsque l'erreur du serveur

var rec = store.getAt(index); 
rec.erase({ 
    success:function(record, operation){ 
     // Do something to notify user knows 
    } 
    failure:function(record, operation){ 
     // correctly triggered when HTTP = 40x or 50x 
     // Would expect that record is still in store. Why not? 
     // Of course i could add it again to store with store.add(record) but is that the prefered way? 
    } 
}); 

J'utilise un proxy AJAX dans Extjs 6.0

Répondre

2

Le erase est pas vraiment pertinent ici. L'appel erase appelle la méthode modèle drop, qui la marque comme la suppression en attente et la supprime de tous les magasins. Tout simplement parce que le serveur n'a pas réussi à le supprimer du serveur ne signifie pas nécessairement que vous le souhaitez dans le magasin, il est toujours en attente de suppression.

+0

Alors, quelle serait la meilleure façon d'attraper ce cas? – Rob

+1

Appelez 'reject' sur le modèle pour réinitialiser l'état abandonné, puis rajoutez-le au magasin si c'est ce que vous voulez. –

+0

Ok, je vois. Déjà deviné que, mais alors il est ajouté à une position différente. N'y a-t-il pas de meilleure façon d'extjs? – Rob

3

Oui, la méthode erase supprime immédiatement l'enregistrement du magasin, sans attendre la réponse du serveur. La façon "hacky" de gérer votre scénario sera la suivante:

  • définissez la propriété dropped de l'enregistrement sur true;
  • enregistrer l'enregistrement en utilisant la méthode save (il va générer une demande de suppression, mais conservera l'enregistrement dans le magasin);
  • Supprimez l'enregistrement du magasin en cas de succès, réinitialisez la propriété dropped à false de l'échec.

    var rec = store.getAt(index); 
    rec.dropped = true; 
    rec.save({ 
        success: function() { 
         store.remove(rec); 
         // Do something to notify user knows 
        } 
        failure: function() { 
         rec.dropped = false; 
        } 
    });