看这个例子:
addEventListener("myEventType", myFunction("argument"));
function myFunction(args:String):Function {
return function(evt:Event):void {
trace(evt.currentTarget, "has", args);
};
}
dispatchEvent(new Event("myEventType", true));
有效。
我可以做类似的事情,但是将"argument"
传递给dispatchEvent()
吗?
在dispatchEvent()
与addEventListener()
和myFunction()
完全分开的类别中,它会非常方便。
我将需要这么多,所以我想在不为每种情况创建自定义事件类的情况下这样做。
答案 0 :(得分:3)
您可以使用本机flash.events.DataEvent
传递String
参数,或者在需要将参数传递给事件处理程序的所有情况下创建具有DataEvent
属性的自定义data:*
。
如果要在添加事件侦听器的位置自定义事件侦听器的行为,可以创建“侦听器”对象来保存此自定义参数(但我认为此技术比自定义事件更复杂):
addEventListener("myEventType", new EventListener("param1").onEvent);
,其中EventListener
就是这样的类:
public class EventListener
{
private var params:*;
public function EventListener(params:*)
{
this.params = params;
}
public function onEvent(event:Event):void
{
trace("onEvent, params = ", params);
}
}
答案 1 :(得分:0)
您可以查看信号(https://github.com/robertpenner/as3-signals)。它们是事件的替代品,您可以通过信号发送任何您需要的额外参数。