这几天一直困扰着我。我写了一个多功能的 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);
}
这行不通。我不知道是不是因为我正在尝试存储回调引用(应该将事件侦听器添加到舞台对象)还是什么?让它工作的好处是我不必每次创建新消息时都添加事件侦听器,只需传递关联的函数即可。
提前感谢您为我提供的任何帮助。