发布于2026-07-22 阅读(0)
扫一扫,手机访问
点击一张图片,然后触发一个自定义事件,并在事件处理中弹出预览——这个需求在Flex开发中很常见。但很多开发者容易在自定义事件的发送与接收环节上栽跟头,尤其是当事件需要跨越皮肤层和逻辑层时。下面通过一个完整的示例,把整个流程拆解清楚。
先定义一个事件类,继承自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);
}
}
}
接下来创建一个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");
}
}
}
皮肤类才是真正触发事件的地方。这里使用了一个Image组件,并为其添加了鼠标单击事件处理函数,在函数内部构造自定义事件并通过dispatchEvent发送出去。注意,img_mouseOutHandler这个命名有点迷惑性,实际上它在鼠标单击时触发,但功能是发送事件。另外,皮肤中引用了assets目录下的柯南.jpg图片。
[HostComponent("spark.components.BorderContainer")]
最后,在MXML应用程序中直接引用ImgHander组件,运行即可看到效果。
注意:发送自定义事件的关键代码是:
var e:MyEvent = new MyEvent(MyEvent.myclick);
img.dispatchEvent(e);
而接收并处理事件则通过:
img.addEventListener(MyEvent.myclick, SetImgShouZhanUrl);
整个流程环环相扣:皮肤层负责发送,逻辑层负责监听处理。理解了这个模型,再复杂的自定义事件传递也能轻松应对。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8