Я пробовал это в течение дня и не могу разобраться.
У меня есть основное приложение 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 будет содержать свойство status, для которого установлено значение 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)"
на моем loginComponent.
Есть идеи, как это сделать? Заранее спасибо. Буду очень признателен за любую помощь.