在as中监听自定义事件并处理事件的实例代码
在Flex开发中,自定义事件需跨越皮肤与逻辑层。通过定义事件类,在皮肤层调用dispatchEvent发送事件,在逻辑层使用addEventListener监听处理,实现点击图片触发自定义事件并弹出预览。
点击一张图片,然后触发一个自定义事件,并在事件处理中弹出预览——这个需求在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);
整个流程环环相扣:皮肤层负责发送,逻辑层负责监听处理。理解了这个模型,再复杂的自定义事件传递也能轻松应对。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。
CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。
Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。
CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。
Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。



























