1
這已經讓我煩惱幾天了。我寫了一個多功能的messageBox類,它工作得很好,但有一件事我堅持。首先,雖然,這裏的一些代碼:AS3將一個回調函數傳遞給一個類構造函數,以便與addEventListener一起使用
文檔類我:
var tMsg:Msg = new Msg("Test Message", "This is a test Message", Msg.INPUT);
tMsg.addEventListener('Answered', qa, false, 0, true);
function qa(e:Event):void{
trace(e.target.label,e.target.result);
tLabel.label = e.target.result;
}
時,無論是「取消」或「確定」按鈕被點擊,結果屬性設置和「回答」事件被派遣。由於這個事件監聽器總是需要添加,所以我認爲將它包含在類構造函數中會更好;但是,Msg類的每個實例都需要自己的回調,具體取決於結果的用途。此外,回調函數應該在文檔類中聲明。
我認爲這可以通過簡單地將函數傳遞給Msg類構造函數來完成,然後使用該引用來動態生成addEventListener。 例如:
/// in document class
var tMsg:Msg = new Msg("Test Message", "This is a test Message", Msg.INPUT, qa);
function qa(e:Event):void{
trace(e.target.label,e.target.result);
tLabel.label = e.target.result;
}
/// in Msg class
public function Msg(txt:String='', msg:String='', type:String=ALERT, callback:Object=null) {
_callback = callback;
addEventListener(Event.ADDED, setup, false, 0, true);
}
private function setup(e:Event){
stage.addEventListener('Answered', _callback, false, 0, true);
}
這是行不通的。我不知道是否因爲我試圖存儲回調引用(事件監聽器應該添加到舞臺對象中)還是什麼?獲得這個工作的好處是我不必在每次創建新消息時添加事件偵聽器,只需傳遞相關函數。
非常感謝您提供給我的任何幫助。
好吧,現在我正式覺得啞巴了。我忘了泡它。它現在完全有效。 – 2012-08-15 08:22:22