私はこれを1日試してきましたが、うまくいきません。
私は主なアプリケーションを持っていますPlanner.mxml
。このビューにはいくつかのカスタム コンポーネントがあり、そのうちの 1 つが です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 に送信します。HTTPService は、要求を処理し、データベースをチェックして xml を返す単純な PHP ファイルです。(これは最善の方法ではないかもしれませんが、現時点ではあまり重要ではありません)。
ユーザーが正常にログインした場合、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 を使用してリッスンします。
これを行う方法はありますか?前もって感謝します。助けていただければ幸いです。