Flex事件机制(一)

Flex事件贯穿我们整个开发,事件分为两类,用户事件和系统事件,比如说我们在页面点击了一个按钮,这是用户触发的事件,当组件初始化完毕,会触发creationComplete事件,这是系统事件。简单的说,用户事件是人触发的,系统事件是flex自身触发的。

       事件的传播分为三个阶段,捕获(Capturing)、定标(Targeting)、冒泡(Bubbling),捕获:为事件监听器检查目标对象之前,应用程序将首先为监听器检查所有这一阶段所注册的父容器和祖先容器,定标:应用程序会为目标对象上的监听器进行检查,冒泡:定标之后,应用程序将为监听器检查所有这一阶段所注册的父容器和祖先容器,冒泡是捕获的相反阶段。这三个阶段中,我们要记住两个对象,target和currentTarget,简单的将,target是引发事件的源对象,currentTarget是监听这个事件的对象。通常来说,target和currentTarget是相同的,比如说我们创建了一个按钮,并在按钮上监听了click事件,但是如果不是在按钮上监听了click事件,而是在它的父容器上监听了这个事件,这时target和currentTarget就不同了。

       说了这些只是我对Flex事件的浅显理解,无论是否做flex开发的朋友看过来都能够对flex开发有一个直观的认识,下面就一个按钮,介绍一下flex中监听事件的四种方式。

       第一种:

<s:Button label="确定" click="Alert.show('确定')" />

       第二种;

<s:Button label="确定">
		<s:click>
			<![CDATA[
				Alert.show("确定");
			]]>
		</s:click>
</s:Button>

       这种方式称之为内联,这种方式在flex中被支持的很好,在使用项目渲染器和项目编辑器的时候也可以这种方式使用。不过这种方式个人不推崇,逻辑比较混乱。

       第三种:

<fx:Script>
		<![CDATA[
			import mx.controls.Alert;			
			protected function submitClickHandler(event:MouseEvent):void
			{
				Alert.show("确定");				
			}			
		]]>
</fx:Script>
<s:Button label="确定" click="submitClickHandler(event)" />

       这种方式比较常见,event参数是flex内部帮我们传递的。

       第四种:

<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.events.FlexEvent;			
			//creationComplete事件调用函数
			protected function creationCompleteHandler(event:FlexEvent):void
			{
				submit.addEventListener(MouseEvent.CLICK, submitClickHandler);
			}			
			protected function submitClickHandler(event:MouseEvent):void
			{
				Alert.show("确定");
			}			
		]]>
</fx:Script>
<s:Button id="submit" label="确定" />

       这种方式常用于动态创建组件或者分离方式构建自定义组件的时候使用。

       在实际开发中,我们常用的方式就是第三种和第四种。到此,内容结束,下一节讲的主要内容是使用事件在父子组件中传输数据。

       ps:我的博客刚刚开始写,如果大家对我的博客形式和博文内容有什么建议的话,欢迎提出,下篇《Flex事件机制(二)》.,敬请关注。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

很全很全的 前端 本地存储方式讲解

程序员宝库关注即可习得新技能! cookie前言 网络早期最大的问题之一是如何管理状态。简而言之,服务器无法知道两个请求是否来自同一个浏览器。当时最简单的方法是...

1975
来自专栏编程

重构的些许收获

题图:Pixabay 这个项目开始之初,赶时间上线。很多地方基本没怎么管代码规范,直到一期完毕回过头来看之前写的代码,不忍直视。为了之后接手的人能更加轻松,也为...

17210
来自专栏芋道源码1024

分布式作业 Elastic-Job-Lite 源码分析 —— 作业配置

一个作业( ElasticJob )的调度,需要配置独有的一个作业调度器( JobScheduler ),两者是 1 : 1 的关系。这点大家要注意下,当然下文...

1195
来自专栏偏前端工程师的驿站

Asp.net管道模型(管线模型)之一发不可收拾

前言                                   为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看...

2099
来自专栏Java帮帮-微信公众号-技术文章全总结

java.io.IOException 断开的管道【面试+工作】

查看采集数据的tomcat日志,习惯性的先翻到日志的最后去查看有没有异常的打印,果然发现了好几种异常信息,但是最多还是这个:

723
来自专栏谈补锅

<转>iOS性能优化:Instruments使用实战

最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下。

872
来自专栏GreenLeaves

Oracle 通过数据字典查询系统信息

简介:数据字典记录了数据库系统的信息,他是只读表和视图的集合,数据字典的所有者是sys用户。注:用户只能在数据字典上执行查询操作,而维护和修改是由系统自己完成的...

1825
来自专栏同步博客

Redis构建分布式锁

  为什么要构建锁呢?因为构建合适的锁可以在高并发下能够保持数据的一致性,即客户端在执行连贯的命令时上锁的数据不会被别的客户端的更改而发生错误。同时还能够保证命...

1012
来自专栏漫话前端

浏览器已原生支持 ES 模块,这对前端开发来说意味着什么?

还记得当初入门前端开发的时候写过的 Hello World 么?一开始我们先创建了一个 HTML 文件,在 <body> 标签里写上网页内容;后来需要学习页面交...

3007
来自专栏阿杜的世界

Spring Boot应用的健康监控

在之前的系列文章中我们学习了如何进行Spring Boot应用的功能开发,以及如何写单元测试、集成测试等,然而,在实际的软件开发中需要做的不仅如此:还包括对应用...

1181

扫码关注云+社区