`
fatherican
  • 浏览: 49435 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

创建可被取消的默认事件处理器

 
阅读更多

创建可被取消的默认事件处理器

[重要说明]:本小节内容由网友闲云野鹤倾情提供,谢谢他的分享。

默认事件处理器用于在组件内部对某些事件进行默认动作相应,这在很多组件里面都是很普遍的。这样组件可以触发某些事件,默认对触发的事件进行处理,比如在可关闭的TitleWindow窗口中,我们单击顶部的关闭按钮,TitleWindow内部的默认关闭事件处理器对该事件进行响应,执行关闭当前窗口的操作。这样存在一种情况,有时候我们需要在关闭窗口前先提示用户将要关闭窗口,是否继续等类似的提示,如果用户确认需要关闭,那么就关闭,否则不关闭。对于后面的一种情况,我们需要阻止默认事件处理器的执行。类似的情况同样发生在我们自行开发的一些Flex组件中,所以有必要讨论一下如何创建一个可被取消的默认事件处理器。

首先,我们要在组件外部自定义对事件的处理器,而且这个处理器的执行优先级要高于默认的事件处理器。也就是说,组件内部的事件处理器的优先级要低于外部的处理器。对于组件外部的事件处理器来说,应有某些方法可以阻止默认事件处理器的执行,具体的实现过程有4个步骤:

1)在组件内部,创建事件时要设置该事件为可被取消,也就是要设置事件的cancelable标志为true,该标志对应事件构造函数Event()的第三个参数。

2)在组件内部,添加默认事件侦听处理器时要使用EventPriority.DEFAULT_HANDLER优先级,于是该事件的默认处理器的优先级就低于普通的事件处理器的优先级。

3)在组件外部,在自定义的事件处理器代码中,要调用event.preventDefault()方法来阻止事件在组件内部的默认事件处理器的执行。

4)在组件内部,默认的事件处理器代码中使用event.isDefaultPrevented()来检测用户是否阻止了默认事件处理。

代码清单1-7是演示代码,在组件的内部,我们定义了一个alarm事件该事件的默认处理器用于处理alarm事件。

代码清单1-7 停止默认事件处理器的演示代码

  1. package
  2. {
  3. importflash.events.Event;
  4. importmx.controls.Alert;
  5. importmx.core.EventPriority;
  6. importmx.core.UIComponent;
  7. [Event(name="alarm",type="flash.events.Event")]
  8. publicclassMyComponentextendsUIComponent
  9. {
  10. publicfunctionMyComponent()
  11. {
  12. //为alarm事件添加默认事件侦听。
  13. /**该事件的优先级为:DEFAULT_HANDLER。这是一
    个低优先级,以使得普通的事件侦听可以*先执行,从而用户可
    以通过调用event.preventDefault()来取消事件的默认处理行为。*/
  14. addEventListener("alarm",handleAlarm,
    false,EventPriority.DEFAULT_HANDLER,true);
  15. }
  16. //一种简单方法,触发一个可被取消的带默认事件处理的事件。
  17. publicfunctiontriggerAlarm():void
  18. {
  19. /**创建一个新的alarm事件。这里的关键点为构造函数的第3个参数,
  20. *该参数表示该事件可以通过event.preventDefault()来取消。*/
  21. dispatchEvent(newEvent("alarm",false,true));
  22. }
  23. //"alarm"事件的默认处理
  24. protectedfunctionhandleAlarm(event:Event):void
  25. {
  26. //检测该事件是否被其他的事件侦听器阻止了默认处理行为。
  27. if(!event.isDefaultPrevented())
  28. ...{
  29. //事件没有被取消。
  30. Alert.show("MyComponent内部Alarm事件默认处理,handleAlarm");
  31. }
  32. }
  33. }//endclass
  34. }//endpackage

代码清单1-8是一段简单的测试代码,我们定义了一个alarm事件的侦听器,在其内部调用event.preventDefault()来阻止该事件的默认执行行为。

代码清单1-8 测试代码

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <mx:Applicationxmlns:mx=http://www.adobe.com/2006/mxml
    layout="vertical"xmlns:local="*">
  3. <mx:Script>
  4. <![CDATA[
  5. protectedfunctionhandleAlarm(event:Event):void
  6. ...{
  7. //为了便于演示,在界面上做一个标记
  8. 来表示是否要阻止默认事件处理的执行。
  9. if(preventToggle.selected)
  10. ...{
  11. trace("Defaultbehaviorisprevented");
  12. event.preventDefault();
  13. }
  14. else
  15. ...{
  16. trace("Wedidn"tpreventthedefault
    behavior,sowe"llseethealertfromMyComponent.");
  17. }
  18. }
  19. ]]>
  20. </mx:Script>
  21. <mx:Buttonlabel="触发事件"click="myComp.triggerAlarm();"/>
  22. <mx:CheckBoxid="preventToggle"label="禁止默认行为?"selected="true"/>
  23. <local:MyComponentid="myComp"alarm="handleAlarm(event);"/>
  24. </mx:Application>

怎么样,很简单吧!这是一个简单但是很有用的技巧,创建可被取消的默认事件行为是Flex组件开发的一个重要部分。

分享到:
评论

相关推荐

    API之网络函数---整理网络函数及功能

    CheckMenuRadioItem 指定一个菜单条目被复选成“单选”项目 CreateMenu 创建新菜单 CreatePopupMenu 创建一个空的弹出式菜单 DeleteMenu 删除指定的菜单条目 DestroyMenu 删除指定的菜单 DrawMenuBar 为指定的...

    Java并发编程(学习笔记).xmind

    事件处理器与访问共享状态的其他代码都要采取线程安全的方式实现 框架通过在框架线程中调用应用程序代码将并发性引入应用程序,因此对线程安全的需求在整个应用程序中都需要考虑 基础知识 线程安全性 ...

    WinRAR_4.0.exe

    RAR 将使用这个字符串作为命令行的默认参数,并将使用 1024KB 字典大小来创建 “固实”压缩文件。 RAR 控制选项使用下列优先级: 命名行开关 最高优先级 在 RAR 变量中的开关 低优先级 保存在配置文件中的...

    javascript常用对象梳理

    功能:把被捕捉类型的所有事件转交给标准事件处理方法进行处理,可转交的事 件与captureEvent相同。 30 scroll事件 语法格式: window.scroll(X坐标,Y坐标) 功能:将窗口移动到指定的坐标位置。 6-2-2 window...

    精通javascript

    • 9.16.htm 取消默认动作之二 • 9.17.htm 创建事件 第10章(\第10章) • 10.1.htm 鼠标事件处理 • 10.2.htm 页面预览 • 10.3.htm 图像切换 • 10.4.htm 接收...

    自己写的dll的简介

    创建标准的DLL,使其可被其他语言使用 通常我们会希望DLL能够被其他语言使用,因而我们的DLL往往不会提供类定义,而只提供函数定义。(因为许多编程语言是不支持类的)。 此时函数的调用约定必须是__stdcall(在vc...

    精通AngularJS part1

    45DOM事件处理器120 46基于DOM的模板121 习惯烦琐的语法121 ngRepeat和多个DOM元素122 不能在运行时修改的元素和属性123 自定义HTML元素与IE的老版本124 47使用过滤器处理模型变换124 内置过滤器125 格式化...

    Visual C++编程技巧精选500例.pdf

    180 如何使用事件对象同步进程? 181 如何在两个执行程序间进行数据通信? 182 如何使用工作线程? 183 如何正常终止线程? 184 如何异常终止线程? 185 如何获取线程退出码? 186 如何使用线程优先级? 187 如何使用用户...

    Windows API函数大全

    CheckMenuRadioItem 指定一个菜单条目被复选成"单选"项目 CreateMenu 创建新菜单 CreatePopupMenu 创建一个空的弹出式菜单 DeleteMenu 删除指定的菜单条目 DestroyMenu 删除指定的菜单 DrawMenuBar 为指定的...

    精通JavaScript

    • 9.15.htm 取消默认动作之一 • 9.16.htm 取消默认动作之二 • 9.17.htm 创建事件 第10章(\第10章) • 10.1.htm 鼠标事件处理 • 10.2.htm 页面预览 • 10.3....

    R.A.M 2019 - River Auto Material 2019

    - 也可通过模型层捕捉/取消捕捉所有或单独点中的地形或模型; - 改变每个点或所有点的河流/湖泊形状,创建外观最佳的道路或河流; - 改变三角数量并将其分布在样条空间中,以获得最经济划算、最美观的样条; - 创建...

    JavaScript应用177例

    7.3.htm 取消默认动作 7.4.htm 创建DOM2事件 第8章(\cha08) 8.1.htm 页面预览 8.2.htm 图像切换 8.3.htm 点亮文本 8.4.htm 鼠标跟随 8.5.htm ...

    WinRAR_5.60_Beta1_x64_SC

    19.在从 WinRAR 图形用户界面外壳创建了 500 个卷之后发出提示,因此用户可 以继续或退出进一步压缩操作。这样做是为了防止在错误输入卷大小的情况下 创建数千个卷。 20.WinRAR 使用兆字节而不是字节作为压缩对话框...

    image-processor:这是一个用于处理图像集合的简单 Rails 应用程序

    图像处理器 它是一个用于处理图像集合的简单 Rails 应用程序。 特征 授权,管理用户 创建具有名称、描述、状态的节点层次结构(如目录) 上传图片 订购图片 插入、复制 旋转和裁剪 取消更改 用于查看和处理图像集的...

    winrar3.7 Beta8

    压缩对话框中“模式”和“取消”按钮被交换。 &lt;br&gt; 2. 错误修正: &lt;br&gt; a) beta 1 可能会把从 ISO 9660 压缩文件中解压文件的文件名剪裁一个字符; &lt;br&gt; b) 打开“Windows 进度条”选项则在转换压缩文件窗口...

    网吧技术培训手册 网管必看

    1.2.1 第一步 安装CPU处理器 27 1.2.2 第二步 安装散热器 31 1.2.3 第三步 安装内存条 33 1.2.4 第四步 安装主板 35 1.2.5 第五步 安装硬盘 37 1.2.6 第六步 安装光驱、电源、显卡 39 1.2.7 第七步 安装线缆接口 41 ...

    McAfee 8.0 简体中文

    通过创建规则指定要阻挡的端口以及是否限制对入站或出站进程的访问,可 以阻挡端口。如果您希望允许一个特定进程或一组进程访问准备阻挡的端口, 也可以从规则中排除这些进程。 阻挡端口时,即同时阻挡 TCP 和 ...

    网吧技术培训手册

    1.2.1 第一步 安装CPU处理器 27 1.2.2 第二步 安装散热器 31 1.2.3 第三步 安装内存条 33 1.2.4 第四步 安装主板 35 1.2.5 第五步 安装硬盘 37 1.2.6 第六步 安装光驱、电源、显卡 39 1.2.7 第七步 安装线缆接口 41 ...

    锐起网吧技术培训手册网管必备

    1.2.1 第一步 安装CPU处理器 27 1.2.2 第二步 安装散热器 31 1.2.3 第三步 安装内存条 33 1.2.4 第四步 安装主板 35 1.2.5 第五步 安装硬盘 37 1.2.6 第六步 安装光驱、电源、显卡 39 1.2.7 第七步 安装线缆接口 41 ...

    ELDK使用与开发手册

    本文档不会给出如何把U-Boot或者Linux移植到一个新的硬件平台,而是默认你的开发板已经被U-Boot和Linux所支持。 本手册各种文档格式的最新版本可以从以下网址获取: · ...

Global site tag (gtag.js) - Google Analytics