Flex学习笔记7——事件
来源:互联网 发布:java rpc实例 编辑:程序博客网 时间:2024/04/28 20:24
概念
所有可视化对象都会派生自己的事件,每个组件都可以注册多个监听器。
EventDispatcher和IeventDispatcher负责实现事件模型,IeventDispatcher包含事件模型应该具备的基本方法:派发事件和注册监听器,移除监听器。
当注册了监听器,使用完后要使用remove移除
事件对象必须是Event或Event的子类
addEventListener
priority:优先级,设置事件监听函数的顺序
userWeakReference:弱引用和垃圾回收有关
用途
事件对象存储数据
事件对象成员函数操作事件对象和影响事件处理系统的行为
派发规则
1. 当事件源对象是一个不在显示列表中的孤立对象时,只有自己是目标对象
2. 当事件源对象在显示列表中,则派发顺序从最顶级的stage向下经过各级父显示对象,到达事件源对象,如果事件对象在构造时设定事件的bubbles属性为true,则会返回到达舞台对象,冒泡阶段不是必须的。
则:
Stage可以接收所有显示对象派发的事件
Stage第一个接收到显示对象派发的事件
3. 某些类型的事件(enterFrame和Init)会直接派发给事件源对象,而不参与捕获和冒泡阶段。
事件派发不是异步的,如
This.dispatchEvent(e);
Trace(‘s’); //会在所有监听器执行完毕后才执行
mxml自定义事件
组件定义
<mx:Metadata> [Event(name="DataChange", type="DataChangeEvent")] </mx:Metadata>
而且在as中要有dispatchEvent DataChange事件的代码
访问方式
<ns1:EmployeeCombo x="146" y="132" DataChange="onChange(event)" />
我的理解是:调用端通过DataChange,其实是 EmployeeCombo.addEventListener(DataChange, function(event:DataChangeEvent)),子组件中this.dispatchEvent(new DataChangeEvent()).所以才能接收,而且对自定义组件也适用。
As自定义事件
1. 发出事件的类,继承自EventDispatcher或者实现IeventDispatcher
2. 创建事件类,类中新建静态常量(事件类型),并定义需要传递的属性,重写toString或formatToString,否则不会自定义事件中的新属性
3. 需要传递参数才需要自定义事件类,否则只需在发出事件的类中创建事件类型常量,如下:
dispatchEvent(new Event("type")) addEventListener("type",function)
拖拽事件
Flex组件内置了拖拽事件的接口,有些控件已经实现拖拽功能,如List,DataGrid,Menu, TileList,Tree。
当在不同类型控件见拖拽时,数据源的数据结构必须兼容
开发自定义的拖拽:对提供方的mouseDown,mouseOver,dragComplete方法监听,对接收方的dragEnter dragDrop dragOver drageExit事件监听
修改默认事件处理
如:默认关闭变成关闭前提示确认后关闭
思路:在组件外部定义事件处理程序,执行优先级高于默认的事件处理程序。
1. 组件内部:创建事件对象时,设置cancelable为true
dispatchEvent(new Event(“alarm”,false,true))
2. 组件内部:添加默认事件处理程序,设置优先级EventPriority.DEFAULT_HANDLER
addEventListener(“alarm”,handleAlarm,false, EventPriority.DEFAULT_HANDLER,true)
3. 组件外部:自定义事件处理程序中,调用event.preventDefault阻止默认的执行
4. 组件内部:默认事件处理程序中,使用event.isDefaultPrevented() 判断是否阻止了默认执行,并执行相应逻辑
handleAlarm中
if(!event.isDefaultPrevented())
组件外部:
<remote:MyComponent test="testHandler" /> privatefunction testHandler(e:Event):void { e.type; e.preventDefault(); //阻止默认事件处理程序的执行 }
组件内部:
package remote{ import flash.events.Event; import mx.controls.Alert; import mx.core.EventPriority; import mx.core.UIComponent; [Event(name="test",type="flash.events.Event")] publicclass MyComponent extends UIComponent { publicfunction MyComponent() { //为alarm添加默认事件监听,default_handler为低优先级,可以使得外部的事件监听优先执行,从而用户 //可以通过e.preventDefault() 来取消默认事件处理程序 this.addEventListener("test",testEventHandler,false,EventPriority.DEFAULT_HANDLER,true); } privatefunction testEventHandler(e:Event):void { //检查默认处理程序是否被阻止 if(!e.isDefaultPrevented()) { Alert.show("事件默认处理程序"); } } publicfunction run():void { //第三个参数 true,代表可通过event.isDefaultPrevented() 取消事件 this.dispatchEvent(new Event("test",false,true)); } }}
- Flex学习笔记7——事件
- FLEX学习笔记----事件
- Flex学习笔记(八)——事件(event)
- Flex 监听键盘事件(学习笔记)
- Flex学习笔记2——第一个Flex程序
- Flex学习笔记11——MVC
- Flex学习笔记9——打印
- Flex学习笔记02 事件监听和分派
- flex学习----自定义事件
- Flex学习笔记12——as学习
- Flex学习笔记(1)——入门,HelloFlex
- Flex学习笔记(2)——使用ActionScript脚本
- Flex学习笔记:DataGrid内容修改监听器——itemEditEnd
- FLEX学习笔记:画图工具——Graphics使用
- Flex学习笔记3——组件和容器
- Flex学习笔记4——自定义组件
- Flex学习笔记5——动画、滤镜的使用
- Flex学习笔记8——数据绑定
- ANT入门与提高
- 字符串实际长度
- C语言中实现C++静态类成员变量
- C/C++中的二维指针问题
- 解决U盘感染病毒后所有文件及文件夹被隐藏的方法
- Flex学习笔记7——事件
- 新人必看第一帖,BT3和BT4傻瓜版使用!附:BT4中文版下载
- Flex学习笔记8——数据绑定
- StringUtil类的常用方法
- Flex学习笔记10——安全机制
- asp.net使用DataSet数据集插入记录
- Flex学习笔记11——MVC
- 离婚的含义
- iModel插件介绍之TableAmtSumPlugin