2011-11-11 14 views
1

私は単にローカルストレージを更新しようとしていますが、Ext.Ajax.requestの内部でthis.store.create()を呼び出すことはできません。 Ajax呼び出しの成功領域内でthis.store.create関数を呼び出すにはどうすればよいですか。ご協力いただき誠にありがとうございます。 JavaScriptで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の例外がありますか?それはスコープの問題かもしれません、あなたの "this"ポインターはあなたが思うものを指していないかもしれません。また、ドキュメントにはstoreのaddメソッドがありますが、createはありません。どのバージョンのSencha Touchを使用していますか? –

+0

私はsencha 1.1を使用しています。私は完全なストア名でストアを参照する必要があると思いますか?すなわち:loginDetails.store.create(params.data);それは正しいでしょうか? –

答えて

1

が、「この」キーワードは、中に。オブジェクトのメソッドで使用

、「これは」メソッドはすぐに属しているオブジェクトを参照して表示されるコンテキストとその意味を変えます。あなたの場合、Ext.Ajax.requestに渡した引数を参照します。

この問題を回避するには、内側のコンテキストで 'store'プロパティにアクセスするために、上位レベル 'this'の参照を保持する必要があります。具体的には次のようになります。

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

ありがとうございました。私はこれをどのように参照するかを理解する必要があります。そのセットアップとしてより複雑なファッションになりました。あなたの店をいつでも参照できる方法はありますか? Like:myStoreName.store.create(params.data)。 –

+0

私はちょうど 'var store = this'を、必要なときにいつでも店の"トップレベル "の方法で行います。 [ここ](http://bonsaiden.github.com/JavaScript-Garden/#function.this)は、 'this'というキーワードを読むのに適しています。 –

+0

コントローラー内のajax呼び出しではなく、データ・ストアでも使用する必要があります。 mvc –

関連する問題