`

v3_02 扩展事件类来传递数据

    博客分类:
  • flex
阅读更多
v3_02 Extending the Event class to pass dataa in the event object 扩展事件类来传递数据
ex3_02
前面已经讲了如何在component触发事件
这部分主要是通知扩展flash.events.Event类,来使用已经触发的事件传递数据
及为什么扩展Event类对于避免组件之间的数据直接绑定来说是必需的
及如何复制已创建的子类以使其能够利用flex框架中内置的事件传播功能
 
以下图例为使用数据绑定的方式实现数据传递
由employeeList的数据变动,可以很容易的传递到Preview中
采用这种方式的问题在于结构方面:
创建组件的目的就是代码和逻辑与组件分离,这样写Preview中还需要依赖Choose组件,不能达到组件利用的目的.
一种更加干净的组件间通信方式是保持它们的松耦合关系
这是基于以下思想的:
每个组件对于任何其它组件来说,都是一个黑盒子,它内部的工作是被隐藏起来的
 
传递信息给一个松耦合的组件的唯一方式就是通过公共的属性或参数
信息传递出去的唯一途径是分派一个自定义的事件,并由应用程序对其进行监听和处理
以这种方式创建组件可以使代码具有更好的重用性和可维护性
 
这里通过事件对象来传递数据,那我们就要想办法把传输数据附加到事件对象中去
做法就是:扩展flash.events.Event类来创建一个自定义的事件类
1.首先写一个事件类
<!--WizRtf2Html Charset=0 -->
<!--WizRtf2Html Charset=0 -->
package events
{
import flash.events.Event;
public class ShowPreview extends Event
{
public var employeeInfo:Object;
public var message:String;
public function ShowPreview(type:String,employeeInfo:Object,message:String)
{
super(type);
this.employeeInfo = employeeInfo;
this.message = message;
}
//用于事件传播
override public function clone() : Event
{
return new ShowPreview(type, employeeInfo, message);
}
} 
 
 
2.在choose组件中使用该事件类,用于与普通事件类相同
注意type变成了自定义的类
<!-- Metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<fx:Metadata>
[Event(name="showPreview", type="events.ShowPreview")]
</fx:Metadata>
  
 
3.事件生成实例也应该使用自定义的事件
4.继续分派到主应用程序
// event handlers -------------------------------------------
protected function preview_clickHandler(event:MouseEvent):void
{
var eventObject:ShowPreview = new ShowPreview("showPreview",employeeList.selectedItem,message.text);
dispatchEvent(eventObject); 
} 
  
从debug中可以看到event中的employeeInfo和message属性
 
 
 
5.修改主应用程序中的事件处理逻辑
给Preview组件的属性赋值
protected function chooseEmployee_showPreviewHandler(event:ShowPreview):void
{
previewEmployeeOfTheMonth.visible = true;
previewEmployeeOfTheMonth.employeeInfo=event.employeeInfo;
previewEmployeeOfTheMonth.message = event.message;
} 
  
 
结果如图所示
 
 
 
 
 
分享到:
评论

相关推荐

    HL7_V3_基础框架

    - **2004年至今**:HL7 V3不断扩展和完善,成为医疗信息化领域的重要标准之一。 #### 五、HL7 V2与HL7 V3的区别 HL7 V2和HL7 V3在很多方面都有所不同,主要体现在以下几个方面: 1. **参考信息模型**:HL7 V3引入...

    Apache_RocketMQ_101_刘振东_V3_Final.pdf

    它在互联网行业中广泛应用,提供高效、稳定、可靠的分布式消息传递服务。RocketMQ 的设计目标是支持大规模分布式系统中的高并发、低延迟以及高可用性消息传输。 在概念模型方面,RocketMQ 主要包含了发布/订阅(Pub...

    zTree_v3-master.zip_zip_ztree

    3. **JSON数据格式**:zTree的数据通常以JSON格式传递,这是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。理解JSON数据格式和规则,能帮助我们有效地向zTree提供数据。 4. **API接口与...

    Genicam标准协议,现在做相机非常的通用了。

    此外,Genicam还支持元数据的传递,这意味着相机可以提供关于捕获图像的附加信息,如曝光时间、增益设置、温度等,这对于图像分析和处理非常有用。同时,Genicam还考虑到了性能优化,例如支持多线程处理,确保高帧率...

    SMPP协议规范 包括smpp.doc, SMPP_v3_4.pdf

    **SMPP协议规范详解** **一、SMPP协议概述** ...总的来说,SMPP协议是短信服务领域的基石,它的规范性和可扩展性使其成为了短消息通信的标准。了解并熟练掌握SMPP协议,对于开发短信相关应用至关重要。

    AllJoyn - Tech Overview v3_for Brooks

    例如,温度传感器可以通过API将当前温度数据发送给其他设备或服务。这些API定义了网络上的“事物”可以向其他“事物”提供的功能,如时间、位置等信息。此外,服务和/或设备可以组合这些API来提供所需的特定功能集。...

    Exchange_Server_2003_Administration_Guide_CN_V3

    《Exchange Server 2003 管理指南中文版 V3》是针对Microsoft Exchange Server 2003这一企业级邮件服务器软件的详细管理手册。Exchange Server 2003是微软公司推出的用于企业电子邮件、日历、联系人和其他通信服务的...

    基于tensorflow的图像分割算法deeplab-v3+.zip

    该算法是对之前版本的Deeplab-v3的扩展和改进,主要目标是将图像中的每个像素精确地分类到预定义的类别中,例如,区分道路、行人、车辆等。 ** TensorFlow 框架介绍 ** TensorFlow 是 Google 开源的一个强大的机器...

    小京东V3邮箱修复文件

    对于负责管理小京东V3系统的管理员而言,应用这类修复文件是一项重要工作。它能够保证系统的最佳运行状态,让平台的运营更加顺畅。当出现用户投诉、系统运行不稳定或者安全漏洞时,能够及时地通过修复文件来解决问题...

    正庚烷机理_chemkintrans.dat_chemkin_柴油机_正庚烷机理_正庚烷_

    正庚烷,作为一种常见的烃类化合物,经常被用作柴油燃料的代表性成分来模拟和理解这些反应。 "chemkintrans.dat" 是 Chemkin 软件中的一种数据文件格式,它包含了化学反应网络的详细信息。Chemkin 是一个广泛使用的...

    FusionCharts v3源码

    通过阅读这些类,我们可以了解如何传递数据、设置图表属性、触发图表事件等。 在学习FusionCharts v3源码时,重点应该放在以下几个方面: - **数据绑定**:理解FusionCharts如何接收和处理数据,包括XML、JSON等...

    ANTLR-v3.ppt

    ANTLR v3的语法规则支持更丰富的语法结构,例如单一元素的EBNF(扩展巴科斯范式),允许如`ID*`这样的表示。此外,它允许在同一个文件中定义解析器和词法器,简化了语法文件的组织。 3. **错误恢复(Error ...

    合泰 C Compiler V3 使用手册

    - **复制传递(copy propagation/value propagation)**: 通过传播变量的值来消除冗余的赋值操作。 - **删除执行不到的代码(Unreachable code Elimination)**: 移除无法到达的代码段。 - **删除死代码(Dead-code ...

    chrome插件demo 实现各个类型的js之间的通信

    Chrome插件,全称为Google Chrome浏览器扩展,是一种增强和定制浏览器功能的应用程序。它们通过JavaScript、HTML...这涉及到理解Chrome提供的API,以及如何在不同环境间安全地传递数据,确保插件的正常运行和用户体验。

    RC522寻卡选卡密码读写卡 战舰V3版

    在战舰V3版中,描述提到“修改密钥没有扩展”,可能意味着项目只实现了基本的密钥验证,而未包含更复杂的密钥管理功能。 读写卡数据是指读取卡片上的信息或者向卡片写入数据。RC522支持多种命令来执行这些操作,如...

    Image-Captioning-pytorch:使用Inception_V3作为主干图像字幕的简单尝试。 基于Pytorch,无需关注(可能会在以后更新)

    接着,这些特征会被传递到一个序列模型,如LSTM(长短时记忆网络)或Transformer,来生成连续的单词序列。序列模型需要进行训练,以学习如何根据输入的图像特征序列正确地预测出对应的描述词序列。 在这个项目中,...

    基于Java和jsp实现的学生成绩管理系统v3.rar

    7. 用户认证与授权:为了保护数据的安全,系统可能实现了用户登录功能,使用session和cookie来跟踪用户状态,确保只有授权用户才能访问特定的资源,如查看或修改成绩。 8. 错误处理与日志记录:良好的错误处理机制...

    launcher-v3-master-源码.rar

    - 触摸事件处理优化:确保DragLayer和子View之间的触摸事件传递高效。 7. **自定义功能扩展**: - 开发者可以根据源码进行二次开发,添加新的功能,如自定义布局、动画效果、手势操作等。 - 可以修改颜色方案、...

    基于Bootstrap V3的Modal 进行 Dialog 二次封装 原创文章

    Bootstrap V3中的Modal组件是一个非常实用的特性,它允许开发者在网页上创建模态对话框,无需离开当前页面即可展示信息、获取用户输入或者执行其他交互操作。在本篇文章中,作者进行了对Modal的二次封装,创建了一个...

    CSharp Language Specificaton (v3)

    此外,C#支持继承,允许一个类从另一个类派生,从而实现代码的重用和扩展。字段用于存储数据,而方法则是实现功能的主要途径。 ### 方法与参数 方法是类的重要组成部分,用于执行特定的任务。C#支持多种类型的方法...

Global site tag (gtag.js) - Google Analytics