我一直在嘗試這一點,現在我無法解決它。從Flex的外部AS類調度事件的問題
我有一個主要應用程序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文件處理請求,檢查數據庫並返回一些XML。 (這可能不是最好的方式,但在這一點上它確實不是太重要)。
如果用戶成功登錄,則xml將包含一個設置爲true
的狀態屬性。我在HTTP服務的結果事件處理程序中檢查了這一點。這是一切都出錯的地方。你可以看到,當用戶成功登錄時,我想分派一個自定義事件;如果沒有,我會顯示一個警告框。但是,這個事件並沒有派遣(或者至少,我不知道如何去聽)。
我想在我的主應用程序中偵聽它,然後我可以將viewstate更改爲登錄狀態。然而,事件似乎從來沒有達到過。我通過在我的loginComponent上有loggedIn="loggedInHandler(event)"
來收聽。
任何想法如何做到這一點?提前致謝。我真的很感激任何幫助。