这已经困扰了我几天了。我已经写了一个多功能的messageBox类,它运行得很好,但有一件事我坚持下去。首先,这里有一些代码:
在我的文档课程中:
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);
}
这不起作用。我不知道是不是因为我试图存储回调引用(事件监听器应该添加到舞台对象中)还是什么?让它工作的好处是每次创建新消息时都不需要添加事件监听器,只需传递相关的函数。
提前感谢您提供给我的任何帮助。
答案 0 :(得分:1)
您应该将事件侦听器添加到调度事件的对象。如果该对象不在显示列表中,或者事件没有冒泡,那么舞台将不会收到该事件。