私はこれを今一日試してきましたが、私はそれを解決できません。フレックスの外部ASクラスからイベントをディスパッチする際の問題
私はメインアプリケーション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);
}
}
すべてのフィールドが完了している場合、私はチェックし、もしそうなら、私は、そのシンプルなPHPファイルでのHTTPServiceへの送信パラメータオブジェクトのコンストラクタパラメータを置きますリクエストを処理し、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!");
}
}
ご覧のとおり、ユーザーが正常にログインすると、カスタムイベントが送出されます。そうでない場合は、警告ボックスを表示します。しかし、このイベントはディスパッチされません(少なくとも、それを聞く方法はわかりません)。
私は主なアプリケーションでそれを聞きたいと思っています。そこで、私はviewstateをログイン状態に変更できます。しかし、このイベントは決してそこに到着しないようです。私はloggedIn="loggedInHandler(event)"
をloginComponentに持っています。
どうすればいいですか?前もって感謝します。私は本当に助けていただければ幸いです。