2011-11-11 1 views
1

J'essaie simplement de mettre à jour le stockage local, mais dans la demande Ext.Ajax je ne peux pas appeler this.store.create(). Comment puis-je appeler la fonction this.store.create à l'intérieur de la zone succès: de l'appel Ajax. Merci beaucoup pour votre aide.this.store.create ne se déclenchera pas dans l'appel ajax

login: function(params) { 
    params.record.set(params.data); 
    var errors = params.record.validate(); 

    if (errors.isValid()) { 

     var myMask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."}); 
     myMask.show(); 

     //now check if this login exists 
     Ext.Ajax.request({ 
      url: '../../ajax/login.php', 
      method: 'GET', 
      params: params.data, 
      form: 'loginForm', 
      success: function(response, opts) { 
       var obj = Ext.decode(response.responseText);  
       myMask.hide();  
       //success they exist show the page 
       if(obj.success == 1){ 
       //this doesn't work below 
            this.store.create(params.data); 
       this.index(); 
       }  
       else{ 
       Ext.Msg.alert('Incorrect Login'); 
       } 
      }, 
      failure: function(response, opts) { 
       alert('server-side failure with status code ' +  response.status); 
       myMask.hide(); 
      } 
     }); 
    } 
    else { 
     params.form.showErrors(errors); 
    } 
}, 
+0

Quelle est l'erreur? Avez-vous une exception JavaScript? Il peut s'agir d'un problème de portée, votre pointeur "this" peut ne pas pointer vers ce que vous pensez être. Aussi les docs mentionnent une méthode add pour les magasins mais pas une création. Quelle version de sencha touch utilisez-vous? –

+0

Im using sencha 1.1 Je suppose que j'ai besoin de référencer le magasin avec son nom complet de magasin? c'est-à-dire: loginDetails.store.create (params.data); Est-ce que ce serait correct? –

Répondre

1

En Javascript, « ce » mot-clé change de sens avec le contexte, il apparaît.

Lorsqu'il est utilisé dans une méthode d'un objet, « ceci » fait référence à l'objet de la méthode appartiennent immédiatement. Dans votre cas, il se réfère à l'argument que vous avez passé à Ext.Ajax.request. Pour contourner ce problème, vous devez conserver une référence du niveau supérieur 'this' afin d'accéder à sa propriété 'store' dans un contexte interne. Plus précisément, il ressemble à ceci:

var me = this, 
    ....; 

Ext.Ajax.Request({ 
... 
success: function(response, opts) { 
       var obj = Ext.decode(response.responseText);  
       myMask.hide();  
       //success they exist show the page 
       if(obj.success == 1){ 
       me.store.create(params.data); 
       this.index(); 
       }  
       else{ 
       Ext.Msg.alert('Incorrect Login'); 
       } 
      }, 
}); 
+0

Merci beaucoup. Je vais devoir comprendre comment je fais référence à cela. comme sa mise en place une mode plus complexe. Existe-t-il un moyen de référencer vos magasins à tout moment? Comme: myStoreName.store.create (params.data). –

+0

Je ferais 'var store = this' dans n'importe quelle méthode" top level "du magasin où que ce soit nécessaire. [Ici] (http://bonsaiden.github.com/JavaScript-Garden/#function.this) est un bon endroit pour lire sur 'ce' mot-clé. –

+0

Je devrais aussi juste utilisé par le magasin de données plutôt qu'un appel ajax à l'intérieur d'un contrôleur. mvc –

Questions connexes