this.store.create不会在ajax调用中触发

时间:2011-11-11 00:41:49

标签: sencha-touch extjs

我只是想尝试更新本地存储,但在Ext.Ajax.request内部我无法调用this.store.create()。如何在Ajax调用的success:区域内调用this.store.create函数。非常感谢您的帮助。

  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);
    }
},

1 个答案:

答案 0 :(得分:1)

在Javascript中,'这个'关键字会根据其显示的上下文更改其含义。

当用于对象的方法时,'这个'指的是该方法直接属于的对象。在您的情况下,它引用您传递给Ext.Ajax.request的参数。

要解决此问题,您需要保留上层的参考资料'这个'为了访问其商店'内在背景下的财产。具体来说,它看起来像这样:

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'); 
              }
           },
});