在 Ext.Ajax.request 中调用父控制器函数
calling the parent controller function in Ext.Ajax.request
我有一个验证 user.On 正确用户名和密码的登录页面,它应该隐藏登录视图并显示下一个 view.When 我调用该函数来做同样的事情它给出了一个错误说 "Uncaught TypeError: this.functionname is not a function
。这是我的代码:
startMain : function() {
Eits.store.DataStore.init();
Eits.Factory.getAppController().start();
},
doLoginClicked : function() {
console.log("button pressed this time");
var name = this.view.getUsername();
var pass = this.view.getPassword();
console.log(name);
console.log(pass);
Ext.Ajax.request({
url: 'login/getLoginStatus.action',
method:'post',
params: {
user: name,
password: pass
}
,
success: function(response) {
console.log(response);
var obj = Ext.decode(response.responseText);
var nextObj=obj.data;
console.log(nextObj);
if (nextObj[0].success) {
console.log(nextObj[0].msg);
this.startMain();//Uncaught TypeError: this.startMain is not a function
this.view.hide();//
}
else
{
console.log(nextObj[0].msg);
}
},
failure: function(response,options,success) {
console.log("inside failure");
console.log(response);
console.log(options);
console.log(success);
Ext.Msg.show({
title:'Error!',
msg: response.text,
icon: Ext.Msg.ERROR,
buttons: Ext.Msg.OK
});
}
});
}
}
有没有办法调用函数并绕过它?
范围问题。当您在成功回调中调用 this
时,您不在定义 startMain
函数的同一范围内。
一个解决方案是在 doLoginClicked
函数内部声明对正确范围的引用:
doLoginClicked : function () {
var me = this;
console.log("button pressed this time");
...
然后在 Ajax 成功回调中,您可以将 this
替换为 me
:
me.startMain();
我有一个验证 user.On 正确用户名和密码的登录页面,它应该隐藏登录视图并显示下一个 view.When 我调用该函数来做同样的事情它给出了一个错误说 "Uncaught TypeError: this.functionname is not a function
。这是我的代码:
startMain : function() {
Eits.store.DataStore.init();
Eits.Factory.getAppController().start();
},
doLoginClicked : function() {
console.log("button pressed this time");
var name = this.view.getUsername();
var pass = this.view.getPassword();
console.log(name);
console.log(pass);
Ext.Ajax.request({
url: 'login/getLoginStatus.action',
method:'post',
params: {
user: name,
password: pass
}
,
success: function(response) {
console.log(response);
var obj = Ext.decode(response.responseText);
var nextObj=obj.data;
console.log(nextObj);
if (nextObj[0].success) {
console.log(nextObj[0].msg);
this.startMain();//Uncaught TypeError: this.startMain is not a function
this.view.hide();//
}
else
{
console.log(nextObj[0].msg);
}
},
failure: function(response,options,success) {
console.log("inside failure");
console.log(response);
console.log(options);
console.log(success);
Ext.Msg.show({
title:'Error!',
msg: response.text,
icon: Ext.Msg.ERROR,
buttons: Ext.Msg.OK
});
}
});
}
}
有没有办法调用函数并绕过它?
范围问题。当您在成功回调中调用 this
时,您不在定义 startMain
函数的同一范围内。
一个解决方案是在 doLoginClicked
函数内部声明对正确范围的引用:
doLoginClicked : function () {
var me = this;
console.log("button pressed this time");
...
然后在 Ajax 成功回调中,您可以将 this
替换为 me
:
me.startMain();