【问题标题】:Can dispatchEvent() carry arguments in AS3?dispatchEvent() 可以在 AS3 中携带参数吗?
【发布时间】:2012-12-25 07:00:42
【问题描述】:

看看这个例子:

addEventListener("myEventType", myFunction("argument"));

function myFunction(args:String):Function {
    return function(evt:Event):void {
        trace(evt.currentTarget, "has", args);
    };
}

dispatchEvent(new Event("myEventType", true));

有效。

我可以做类似的事情,但通过dispatchEvent() 传递"argument" 吗?

这在dispatchEvent()addEventListener()myFunction() 完全分离的类中会非常方便。

我会非常需要这个,所以我想在不为每种情况创建自定义事件类的情况下做到这一点。

【问题讨论】:

    标签: actionscript-3 events parameters addeventlistener dispatchevent


    【解决方案1】:

    您可以使用本机flash.events.DataEvent 来传递String 参数,或者在需要将参数传递给事件处理程序的所有情况下使用data:* 属性创建自定义DataEvent

    如果您想自定义事件侦听器的行为来代替添加事件侦听器,您可以创建“侦听器”对象来保存此自定义参数(但我认为这种技术比自定义事件更复杂): 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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以查看 Signals (https://github.com/robertpenner/as3-signals)。它们是事件的替代品,您可以使用信号发送任何您想要的额外参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-09
        • 2023-03-03
        • 2011-08-16
        • 2020-02-09
        • 1970-01-01
        • 2015-11-13
        相关资源
        最近更新 更多