商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 在as中监听自定义事件并处理事件的实例代码

在as中监听自定义事件并处理事件的实例代码

  发布于2026-07-22 阅读(0)

扫一扫,手机访问

点击一张图片,然后触发一个自定义事件,并在事件处理中弹出预览——这个需求在Flex开发中很常见。但很多开发者容易在自定义事件的发送与接收环节上栽跟头,尤其是当事件需要跨越皮肤层和逻辑层时。下面通过一个完整的示例,把整个流程拆解清楚。

1. 自定义事件

先定义一个事件类,继承自flash.events.Event,并声明一个静态常量作为事件类型。这里我们定义了一个名为myclick的事件。

package bridge {
    import flash.events.Event;
    import mx.events.FlexEvent;
    public class MyEvent extends Event {
        public static const myclick:String = "myclick";
        public function MyEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false) {
            super(type, bubbles, cancelable);
        }
    }
}

2. 监听与处理事件的主类

接下来创建一个BorderContainer的子类ImgHander,它负责初始化监听,并在事件触发时弹出提示框。注意,这里通过SkinPart声明了一个img组件,用于后续在皮肤中绑定。

package handler {
    import bridge.MyEvent;
    import flash.events.Event;
    import mx.controls.Alert;
    import skin.ImgHanderSkin;
    import spark.components.BorderContainer;
    import spark.components.Image;

    public class ImgHander extends BorderContainer {
        [SkinPart(required = "true")]
        public var img:Image;

        public function ImgHander() {
            super();
            this.setStyle("skinClass", ImgHanderSkin);
            this.percentHeight = 100;
            this.percentWidth = 100;
        }

        override public function initialize():void {
            super.initialize();
            img.addEventListener(MyEvent.myclick, SetImgShouZhanUrl);
        }

        private function SetImgShouZhanUrl(event:Event):void {
            Alert.show("Preview");
        }
    }
}

3. 皮肤类:发送自定义事件

皮肤类才是真正触发事件的地方。这里使用了一个Image组件,并为其添加了鼠标单击事件处理函数,在函数内部构造自定义事件并通过dispatchEvent发送出去。注意,img_mouseOutHandler这个命名有点迷惑性,实际上它在鼠标单击时触发,但功能是发送事件。另外,皮肤中引用了assets目录下的柯南.jpg图片。



    [HostComponent("spark.components.BorderContainer")]
    
        
    
    
        
        
    
    
        
            
        
    
    
        
            
        
        
    

4. 应用程序入口

最后,在MXML应用程序中直接引用ImgHander组件,运行即可看到效果。



    

注意:发送自定义事件的关键代码是:

var e:MyEvent = new MyEvent(MyEvent.myclick);
img.dispatchEvent(e);

而接收并处理事件则通过:

img.addEventListener(MyEvent.myclick, SetImgShouZhanUrl);

整个流程环环相扣:皮肤层负责发送,逻辑层负责监听处理。理解了这个模型,再复杂的自定义事件传递也能轻松应对。

本文转载于:https://www.jb51.net/article/37968.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注