【问题标题】:How to add event handling with custom classes in as3如何在 as3 中使用自定义类添加事件处理
【发布时间】:2013-06-15 22:10:43
【问题描述】:

我看到一个这样的问题,但是答案避免了使用类内部的回调函数。

我做了一个读取目录(ListaDir)的类,向 php 服务器端发出请求并处理答案。我希望这样使用:

var Lista:ListaDir = new ListaDir(urltophplibrarythatreadthedirectory); // this is working
Lista.addEventListener(Event.COMPLETE, myHandlerFunc); // this is the dream

function myHandlerFunc(e){
var Res:Object = e.target.data; // The answer in object containing the list and another info
}

可以这样吗?怎么样?

【问题讨论】:

    标签: actionscript-3 events


    【解决方案1】:

    让您的自定义类扩展 EventDispatcher 并调度所需的事件。

    例如,对于像Event.Complete 这样的简单事件,只需调度一个新的Event

    package
    {
        import flash.events.Event;
        import flash.events.EventDispatcher;
    
        public class ListaDir extends EventDispatcher
        {
            public function dispatch():void
            {
                dispatchEvent(new Event(Event.COMPLETE));
            }
        }
    }
    

    如果您需要发送带有数据的事件,最好创建您的事件类。

    自定义事件类

    例如,这个CustomEvent 演示了一个data 有效负载对象:

    package
    {
        import flash.events.Event;
    
        public class CustomEvent extends Event
        {
            public static const COMPLETE:String = "COMPLETE";
    
            public var data:*;
    
            public function CustomEvent(type:String, data:*, bubbles:Boolean=false, cancelable:Boolean=false)
            {
                super(type, bubbles, cancelable);
    
                if (data)
                    this.data = data;
            }
        }
    }
    

    ListaDir 类

    当这个类派发你的CustomEvent时,它可以发送一个数据载荷:

    package
    {
        import flash.events.Event;
        import flash.events.EventDispatcher;
    
        public class ListaDir extends EventDispatcher
        {
            public function dispatch():void
            {
                var dataObject:Object = {name: "Example Data"};
                dispatchEvent(new CustomEvent(CustomEvent.COMPLETE, dataObject));
            }
        }
    }
    

    实施:

    实例化并创建一个事件监听器:

    var listaDir:ListaDir = new ListaDir();
    listaDir.addEventListener(CustomEvent.COMPLETE, completeHandler);
    

    完成后,检索您的数据对象:

    protected function completeHandler(event:CustomEvent):void
    {
        var dataObject:* = event.data;
    }
    

    【讨论】:

    • 酷!但我收到错误“1180:调用可能未定义的方法 dispatchEvent”。是否缺少要导入的库?
    • 确保您的 ListaDir 类扩展 EventDispatcher,如上述示例所示。
    • 有效!!!谢谢!我想我只是迈出了一大步,我刚刚开始了解一些 as3 和面向对象的编程......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多