有时候我们需要让两个组件之间实现联动,并且在其中传递数据,自定义事件机制可以帮助我们比较优雅的实现这种需要.

下面的例子,是打算实现一个列表和一个编辑框的联动.

编辑框代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*" creationComplete="init()">
  3. <mx:Script>
  4. <![CDATA[
  5. import my.DummySelectEvent;
  6. import mx.controls.Alert;
  7. private function init():void
  8. {
  9. DummySelectEvent.dispatcher.addEventListener(DummySelectEvent.SELECTED_DATA_CHANGE,dataChangeListener);
  10. }
  11. private function dataChangeListener(event:DummySelectEvent):void
  12. {
  13. var data = event.data;
  14. //Alert.show(event.data.name);
  15. detailPanel.changeMode(Detail.EDIT_SIMPLE,data);
  16. }
  17. ]]>
  18. </mx:Script>
  19. <mx:HBox x="104" y="126" width="1000">
  20. <ns1:List>
  21. </ns1:List>
  22. <ns1:Detail id="detailPanel" x="104" y="135" widthInit="0" widthAdvanced="600">
  23. </ns1:Detail>
  24. </mx:HBox>
  25. </mx:Application>

列表代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="100%" height="300" xmlns:my="my.*" creationComplete="initList()" xmlns:local="*">
  3. <mx:Script>
  4. <![CDATA[
  5. import my.DummySelectEvent;
  6. import mx.events.FlexEvent;
  7. import my.Dummy;
  8. import mx.collections.ArrayCollection;
  9. import mx.controls.Alert;
  10. private var dummyList:ArrayCollection;
  11. private var itemSelected:Boolean = false;
  12. private function initList():void{
  13. dummyList = new ArrayCollection();
  14. for( var i:Number = 0;i<10;i++)
  15. {
  16. var dummy:Dummy = new Dummy();
  17. dummy.name = "name"+i;
  18. dummy.email = "email"+i;
  19. dummy.mobile = "mobile" +i;
  20. dummy.address = "address"+i;
  21. dummy.qq = "qq"+i;
  22. dummy.msn = "msn"+i;
  23. dummyList.addItem(dummy);
  24. }
  25. dataGrid.dataProvider = dummyList;
  26. }
  27. private function itemSelect():void
  28. {
  29. var dataChangeEvent:DummySelectEvent = new DummySelectEvent(dataGrid.selectedItem,DummySelectEvent.SELECTED_DATA_CHANGE);
  30. DummySelectEvent.dispatcher.dispatchEvent(dataChangeEvent);
  31. }
  32. private function deleteItem():void{
  33. Alert.show("确定要删除?");
  34. }
  35. ]]>
  36. </mx:Script>
  37. <!--<mx:Label id="selectedItem" visible="false" data = "{dataGrid.selectedItem}" dataChange="itemSelect()"/>-->
  38. <mx:Spacer height="2">
  39. </mx:Spacer>
  40. <local:ListBar>
  41. </local:ListBar>
  42. <mx:DataGrid id="dataGrid"
  43. x="0" y="0" width="100%" height="100%"
  44. data="{dataGrid.selectedItem}"
  45. dataChange="itemSelect()" >
  46. <mx:columns>
  47. <mx:DataGridColumn headerText="name" dataField="name"/>
  48. <mx:DataGridColumn headerText="email" dataField="email"/>
  49. <mx:DataGridColumn headerText="mobile" dataField="mobile"/>
  50. </mx:columns>
  51. </mx:DataGrid>
  52. <mx:HBox width="100%">
  53. <mx:Button label="删除选中" enabled="{itemSelected}" click="deleteItem()"/>
  54. </mx:HBox>
  55. </mx:Panel>

DummyVO代码

  1. package my
  2. {
  3. [Bindable]
  4. public class Dummy
  5. {
  6. public function Dummy()
  7. {
  8. }
  9. public var name:String;
  10. public var mobile:String;
  11. public var email:String;
  12. public var qq:String;
  13. public var msn:String;
  14. public var address:String;
  15. }
  16. }

自定义事件代码

  1. package my
  2. {
  3. import flash.events.Event;
  4. import flash.events.EventDispatcher;
  5. public class DummySelectEvent extends Event
  6. {
  7. public var data:Object;
  8. public static var SELECTED_DATA_CHANGE:String = "selectedDataChange";
  9. public static const dispatcher:EventDispatcher=new EventDispatcher();
  10. public function DummySelectEvent(data:Object,type:String)
  11. {
  12. super(type,true,false);
  13. this.data = data;
  14. }
  15. override public function clone():Event
  16. {
  17. return new DummySelectEvent(data,type);
  18. }
  19. }
  20. }

主程序代码

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*" creationComplete="init()">
    3. <mx:Script>
    4. <![CDATA[
    5. import my.DummySelectEvent;
    6. import mx.controls.Alert;
    7. private function init():void
    8. {
    9. DummySelectEvent.dispatcher.addEventListener(DummySelectEvent.SELECTED_DATA_CHANGE,dataChangeListener);
    10. }
    11. private function dataChangeListener(event:DummySelectEvent):void
    12. {
    13. var data = event.data;
    14. //Alert.show(event.data.name);
    15. detailPanel.changeMode(Detail.EDIT_SIMPLE,data);
    16. }
    17. ]]>
    18. </mx:Script>
    19. <mx:HBox x="104" y="126" width="1000">
    20. <ns1:List>
    21. </ns1:List>
    22. <ns1:Detail id="detailPanel" x="104" y="135" widthInit="0" widthAdvanced="600">
    23. </ns1:Detail>
    24. </mx:HBox>
    25. </mx:Application>

FLEX自定义事件的更多相关文章

  1. Flex 自定义事件

    一.分派自定义事件类型 任何实现flash.event.IEventDispatcher接口的对象都可以分派事件,这包括所有显示对象和一些非显示对象类.通常,对于 自定义的非显示类,可以通过扩展fla ...

  2. Flex事件机制学习-自定义事件实现类间通信 .

    今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite     {            public function ...

  3. 【教程】【FLEX】#003 自定义事件、模块间通讯

    本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...

  4. Flex之自定义事件

    1.通过dispatchEvent委托事件模式完成自定义事件: <?xml version="1.0" encoding="utf-8"?> < ...

  5. flex中dispatchEvent的用法(自定义事件) .

    Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类的一个事件发送方法,它可以发送出Event类或其子类的实 ...

  6. [置顶] flex4事件监听与自定义事件分发(三)

    1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...

  7. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  8. ExtJS自定义事件

    1.开发ExtJS组件UI的时候,基本上对于一些操作,就是与后台交互之类的多数都是用户进行点击触发一个事件,在事件的处理器handler里面调具体的业务方法,完成业务数据的处理以及业务流程的流转机制, ...

  9. flex 自定义组件的编写

    使用flex也很久了,也改过别人写的flex自定义组件,但是就是没有系统的研究下flex组件的编写步骤,和要注意的东西,在这里我参照一本书中的例子,好好的理解下,也为了巩固下自己对flex的理解! 1 ...

随机推荐

  1. paip 自定义输入法多多输入法词库的备份导出以及导入

    paip 自定义输入法词库的备份导出以及导入 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/ ...

  2. paip . 解决spring No unique bean of type [com.mijie.homi.search.service.index.MoodUserIndexService]

    paip . 解决spring No unique bean of type   [com.mijie.homi.search.service.index.MoodUserIndexService] ...

  3. android: 播放音频

    在 Android 中播放音频文件一般都是使用 MediaPlayer 类来实现的,它对多种格式的音 频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单.下表列出了 MediaPlay ...

  4. docker使用GPU

    1.物理机安装显卡驱动 2.安装nvidia-docker wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download ...

  5. 如何通过linux ssh远程linux不用输入密码登入

    如何通过一台linux ssh远程其他linux服务器时,不要输入密码,可以自动登入.提高远程效率,不用记忆各台服务器的密码. 工具/原料   ssh,ssh-keygen,scp 方法/步骤   首 ...

  6. windows 隐藏文件方法

    隐藏: 然后在里面输入:attrib +s +a +h +r f:\123 (f的意思就是F盘,123就是你新建的文件夹名字),然后按回车,你会发现F盘下的123文件夹不见的,其实就是被你隐藏了. 文 ...

  7. //暴力打开某个APP iOS 私有API LSApplicationWorkspace

    //暴力打开某个APP = .= 如果可以打开.直接打开不解释 +(BOOL)isOpenApp:(NSString*)appIdentifierName { Class LSApplicationW ...

  8. 深入分析Java Web技术(2) IO

    IO是当今Web面临的主要问题之一,可以说,大部分web应用的瓶颈都是IO的瓶颈. Java的IO类是java.io.它包含有80多个类,分为4大部分: 基于字节操作: InputStream,Out ...

  9. [转]java byte 数据类型(基础)

    package com.suypower.chengyu.test; public class ByteTest { /** * byte 8 bits -128 - + 127 * 1 bit = ...

  10. TNSNAMES.ORA 配置

    上面的sqlnet.ora文件说明:SQLNET.AUTHENTICATION_SERVICES= (NTS)——这个表示采用os认证,在数据库服务器上,可以利用sqlplus “/ as sysdb ...