2011-11-11 75 views
1

我只是試圖更新本地存儲,但內部的Ext.Ajax.request我無法調用this.store.create()。如何在Ajax調用的success:區域內調用this.store.create函數。非常感謝您的幫助。this.store.create不會在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

什麼是錯誤?你會得到一個JavaScript異常嗎?這可能是一個範圍問題,你的「這個」指針可能並不指向你的想法。此外,文檔提到了商店的添加方法,但不是創建。您使用的是哪種版本的sencha touch? –

+0

即時通訊使用sencha 1.1我想我需要引用商店的完整商店名稱?即:loginDetails.store.create(params.data);那是對的嗎? –

回答

1

在Javascript中,「這個」的關鍵字改變其含義與它出現在。

當在對象的方法中使用,「這」是指該對象的方法立即屬於上下文。在你的情況下,它指的是你傳遞給Ext.Ajax.request的參數。

要解決此問題,需要保留上層'this'的引用以便在內部上下文中訪問其'store'屬性。具體來說,它看起來像這樣:

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

非常感謝。我需要弄清楚我是如何引用這個的。作爲它的設置它是一個更復雜的時尚。有沒有辦法在任何時候參考您的商店?像:myStoreName.store.create(params.data)。 –

+0

我只需在商店的任何「頂級」方法中執行'var store = this'即可。 [Here](http://bonsaiden.github.com/JavaScript-Garden/#function.this)是閱讀「this」關鍵字的好地方。 –

+0

我應該也只是使用數據存儲而不是控制器內的ajax調用。 MVC –