this.store.create не будет запускать вызов ajax - PullRequest
1 голос
/ 11 ноября 2011

Я просто пытаюсь обновить локальное хранилище, но внутри Ext.Ajax.request я не могу вызвать this.store.create (). Как мне вызвать функцию this.store.create внутри success: область вызова 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);
    }
},

1 Ответ

1 голос
/ 11 ноября 2011

В Javascript ключевое слово «this» меняет свое значение в зависимости от контекста, в котором оно появляется.

При использовании в методе объекта «this» относится к объекту, которому метод непосредственно принадлежит. В вашем случае это относится к аргументу, который вы передали 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'); 
              }
           },
});
...