2011-02-28 2 views
6

J'essaie de gérer une exception dans une instance Ext.data.Store lors de la création d'un nouveau Ext.data.Record. Lorsque le serveur répond par le JSON suivant:extjs stocker la gestion des erreurs

{"success": false, "message": "some text"} 

Je reçois une exception de type « demande », même si le serveur renvoie une réponse HTTP 200!

Pour obtenir une erreur « à distance » Je dois créer un objet avec la root propriété

({ 
    "success": false, 
    "message": "some text", 
    "data": { 
     "PositionId": "00000000-0000-0000-0000-000000000000", 
     "Name": "123" 
    } 
}) 

... mais je ne veux pas. Est-il possible de changer ce comportement? En outre, lorsque j'insère un enregistrement dans le magasin, il est automatiquement ajouté à la grille associée, mais si une erreur se produit, il reste là, donc j'ai besoin de recharger le magasin pour chaque erreur. Y a-t-il une meilleure façon de faire cela?

+0

Pouvez-vous construire votre question un peu? Par exemple, où vous obtenez les erreurs 'request' ou 'remote' que vous voyez? Si elle est dans un écouteur 'loadexception' sur le magasin, alors elle ne devrait avoir que des types d'exception 'response' et 'remote'. Où voyez-vous une erreur "request"? Si vous pouvez fournir des exemples de code, cela aidera mieux à répondre à votre question. –

Répondre

4

Enfin, j'ai découvert que si je renvoie des données vides, cela fonctionne comme prévu. Donc, je ne ai pas besoin de renvoyer des données fictives, ma réponse du serveur est:

({ 
    "success": false, 
    "message": "some text", 
    "data": {} 
}) 
+0

puis-je avoir un peu plus de détails? J'ai essayé la même chose mais je dois encore recharger la grille :( – Leonid

+1

Je pense que lorsque vous n'avez pas de propriété root dans la réponse, le lecteur échoue et l'événement de chargement ne se déclenche pas, mais lorsque vous envoyez des événements vides, vous pouvez vérifier json retourné (dans ext4.2 au moins) comme ceci: this.getProxy(). getReader(). rawData; – meta

+0

lorsque le succès est faux, vous ne pouvez pas accéder à la propriété de réponse sur l'objet d'opération. www.sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false –

10

Vous devez prendre l'un des deux événements de magasins:

  1. loadexception (dépréciée)
  2. exception

Par exemple, vous pouvez:

// make the store 
var myStore = new Ext.data.Store({...}); 
// catch loading exceptions 
myStore.on('exception',function(store, records, options){ 
    // do something about the record exception 
},this); 
// load store 
myStore.load(); 

Vous pouvez aussi simplement utilisez le succès et échec événements à partir du magasin pour prendre des mesures basées sur le succès drapeau.

0

quand le succès est fausse opération n'a pas une propriété de réponse. Ce fil l'explique très clairement!

http://www.sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false

Exemple:

Ext.define("SC.store.SegurosCancelacionStore", { 
    extend: "Ext.data.Store", 
    model: "SC.model.PersonaSeguro", 
    proxy: { 
     timeout: 90000, 
     actionMethods: { 
      read : 'POST' 
     }, 
     type: "ajax", 
     url: "../SegurosFinsolCancelacionServlet", 
     reader: { 
      type: "json", 
      root: "seguros", 
      messageProperty : 'msjError' //without this, it doesn't work 
     } 
    }, 
    autoLoad: false 
}); 

Mise en œuvre:

storeSegurosCancelacion.load({ 
       params: { 
        'sucursal':sucursal, 
        'persona': persona 
       }, 
       callback:function(records, operation, success){ 
        msg.hide(); 
        if(success == true){ 
         if(records.length == 0){ 
         Ext.Msg.alert('Resultado', 'No se ha encontrado información'); 
         } 
        } 
        if(success == false){ 
         try{ 
          Ext.Msg.alert('Error', operation.getError()); // way more elegant than ussing rawData etc ... 
         }catch(e){ 
           Ext.Msg.alert('Error', 'Error inesperado en el servidor.'); 
         } 
        } 
       } 
      }); 

Meilleures salutations @ code4jhon