我已经尝试了一天,但我无法解决。
我有一个主要的应用程序Planner.mxml
。这个视图有几个自定义组件,其中之一是LoginView.mxml
. 在LoginView.mxml
我执行以下操作:
protected function btnLoginClick(event:MouseEvent):void
{
try
{
var login:Login = new Login(txtEmail.text, txtPassword.text);
}
catch(error:Error)
{
Alert.show(error.message, "Oops!");
}
}
我创建了我的Login
类的一个新实例并将一些参数发送到构造函数。我的构造函数如下所示:
public function Login(email:String, password:String)
{
if(email == "" || password == "")
{
throw new Error("Please complete all fields.");
}
else
{
var loginRequest:HTTPService = new HTTPService();
var parameters:Object = new Object();
parameters.email = email;
parameters.password = password;
loginRequest.url = Globals.LOGIN_URL;
loginRequest.resultFormat = "object";
loginRequest.method = "POST";
loginRequest.addEventListener("result", loginHandleResult);
loginRequest.addEventListener("fault", loginHandleFault);
loginRequest.send(parameters);
}
}
在这里,我检查所有字段是否完整,如果是,我将构造函数参数放在一个参数对象中,然后我将其发送到 HTTPService,这是一个处理请求的简单 PHP 文件,检查 db 并返回一些 xml。(这可能不是最好的方法,但这在这一点上真的不太重要)。
如果用户成功登录,xml 将包含一个设置为的状态属性true
。我在 HTTP 服务的结果事件处理程序中检查这一点。这就是一切都出错的地方。
protected function loginHandleResult(event:ResultEvent):void
{
if(event.result.status == true)
{
trace("logged in");
// here stuff goes wrong
var e:LoggedInEvent = new LoggedInEvent("loggedIn");
dispatchEvent(e);
}
else
{
trace("not logged in");
Alert.show("Wrong credentials.", "Oops!");
}
}
如您所见,当用户成功登录后,我想调度一个自定义事件;如果没有,我会显示一个警告框。但是,此事件不会发送(或者至少,我不知道如何监听它)。
我想在我的主应用程序中收听它,然后我可以将我的视图状态更改为登录状态。但是,该事件似乎永远不会到达那里。我通过登录组件来收听它loggedIn="loggedInHandler(event)"
。
知道怎么做吗?提前致谢。我真的很感激任何帮助。