我只是想尝试更新本地存储,但在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);
}
},
答案 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');
}
},
});