在开发具有子窗体,或者itemrenderer的应用时,常常涉及到子窗体向父窗体传递参数或者从itemrenderer内的控件向外部的主程序传递参数的需求。这些都可以通过事件机制这一统一方法加以解决。
在我的应用中有两个需求:

1、左侧的List控件的itemrenderer中包含CheckBox控件,当其状态改变时需要同时改变主程序中的一个数组变量的内容;
2、左下方的“新增届次”按钮会弹出一个窗口,窗口中输入届次信息后需要修改数据库中的表,同时表的更改结果要能够在List控件中体现出来。

这两个需求我都通过事件机制来解决,具体方法如下:
第一个需求:
1、首先新建一个事件类:

package com.RenDa.event{
    import flash.events.Event;
    public class ListItemChangeEvent extends Event{
        public var Jieci:Object;//用来传递参数的类属性
        public function ListItemChangeEvent(type:String, Jieci:Object=null,
                              bubbles:Boolean=false, cancelable:Boolean=false) {
            this.Jieci=Jieci;
            super(type, bubbles, cancelable);
        }
    }
}

2、List控件的代码如下:
            <mx:List id="JieciList" bottom="42" top="38" left="10" right="0" dataProvider="{JieciListAC}" labelFunction="ListLabelFunction">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:CheckBox change="onChange(event)">
                        <mx:Script>
                            <![CDATA[
                                import com.RenDa.event.ListItemChangeEvent;
                                private function onChange(evt:Event):void {
                                    var JieciObj:Object=new Object
                                    JieciObj.jie=data.Jie
                                    JieciObj.ci=data.Ci
                                    //触发自定义事件,因为事件处理程序在主窗体中,所以evt的第三个参数即bubbles设置为TRUE,表示冒泡到主程序层
                                    var evtChange:ListItemChangeEvent=new ListItemChangeEvent("List_Item_Changed",JieciObj,true);
                                    this.dispatchEvent(evtChange);
                                }
                            ]]>
                        </mx:Script>
                        </mx:CheckBox>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:List>
3、主程序的初始化函数中定义时间侦听器:

private function init():void{
       JieciList.addEventListener("List_Item_Changed",ListItemChangeHandler);   
       }

4、主程序中定义事件处理函数:

private function ListItemChangeHandler(evt:ListItemChangeEvent):void {
       //需要执行的代码放在这里
       }

对于第二个需求,也是同样的原理,只不过主程序中侦听器的定义不是在程序初始化时,而是弹出窗口建立时,在子窗口关闭时触发事件,在主程序中侦听事件并作相应操作:
1、定义事件类:
package com.RenDa.event{
    import flash.events.Event;
    //子窗体关闭事件
    public class WindowCloseEvent extends Event{
         public function WindowCloseEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
           super(type, bubbles, cancelable);
           }
    }
}
2、子窗体中在关闭子窗体之前触发事件:

var evtClose:WindowCloseEvent=new WindowCloseEvent("Sub_Window_Closed");
this.dispatchEvent(evtClose);
PopUpManager.removePopUp(this)//关闭子窗体

3、主程序中定义事件侦听器:
private function NewJieciBtnClickHandler(evt:MouseEvent):void{//弹出子窗按钮
   var popNewJieci: NewJieciWin=NewJieciWin(PopUpManager.createPopUp(this,NewJieciWin,true));
   //弹出对话框居中
   PopUpManager.centerPopUp(popNewJieci);
   //定义事件侦听器
   popNewJieci.addEventListener("Sub_Window_Closed",NewJieciWinCloseHandler);
   }
4、主程序中的事件处理函数:
private function NewJieciWinCloseHandler(evt:WindowCloseEvent):void{
     //需要执行的代码放在这里
     }

转载自: http://blog.sina.com.cn/s/blog_4d65c19e0100gwuv.html

Flex中利用事件机制进行主程序与子窗体间参数传递的更多相关文章

  1. Spring 中的事件机制

    说到事件机制,可能脑海中最先浮现的就是日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作.这些listener是怎 ...

  2. jQuery中的事件机制深入浅出

    昨天呢,我们大家一起分享了jQuery中的样式选择器,那么今天我们就来看一下jQuery中的事件机制,其实,jQuery中的事件机制与JavaScript中的事件机制区别是不大的,只是,JavaScr ...

  3. Tomcat与Spring中的事件机制详解

    最近在看tomcat源码,源码中出现了大量事件消息,可以说整个tomcat的启动流程都可以通过事件派发机制串起来,研究透了tomcat的各种事件消息,基本上对tomcat的启动流程也就有了一个整体的认 ...

  4. C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

    from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...

  5. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  6. nodeJS中的事件机制

    events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如http.fs等.本文将详细介绍nodeJS中的事件机制 EventEmitter 多数 Node.js ...

  7. flex中Button事件中的e.target

    关于flex中的Button事件中的e.target. 今天想在事件中调用模块中的对象通过e.target获取单击的这个Button对象,但是可能是使用var btn:Button = e.targe ...

  8. javascript 中的事件机制

    1.javascript中的事件. 事件流 javascript中的事件是以一种流的形式存在的. 一个事件会也有多个元素同时响应. 有时候这不是我们想要的效果, 我们只是需要某个特定的元素相应我们的绑 ...

  9. libevent中的事件机制

    libevent是事件驱动的网络库,事件驱动是他的核心,所以理解事件驱动对于理解整个网络库有很重要的意义.       本着从简入繁,今天分析下单线程最简单的事件触发.通过sample下的event- ...

随机推荐

  1. 【海通国际】Joe Lowry(Mr. Lithium)谈全球电池原材料供应危机

    [海通国际]Joe Lowry(Mr. Lithium)谈全球电池原材料供应危机 环球锂业公司(Global Lithium)总裁Joe Lowry日前接受了欧洲锰业Euro Manganese的邀请 ...

  2. [bug] NameNode无法启动 invalid-uri-for-namenode-address

    配置文件core-site.xml中设置有误 <property> <name>fs.defaultFS</name>(NameNode地址) <value& ...

  3. 通用PE u盘装Ghost Win7系统教程

    通用PE u盘装Ghost Win7系统教程 导读 通用pe工具箱是现在最老牌的的U盘装系统和维护电脑的专用工具之一,一键式制作.操作简单便捷,几乎100%支持所有U盘,不再为装机烦恼们,抓紧时间下载 ...

  4. IIS 10 设置FTP Passive Mode 固定端口

    1. Run [Start] - [Server Manager] and Click [Tools] - [Internet Information Services (IIS) Manager]. ...

  5. GCC参数详解-(转自:篱笆博客)

    gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言, ...

  6. PCB布线规范

    模拟电路和数字电路PCB设计的不同点 http://linear.eefocus.com/module/forum/thread-593593-1-1.html 合集   PCB给种设计资料 http ...

  7. Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系

    在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:<ignore_js_op> 以前一直好奇这几个参数和实际使用的STM32芯片中F ...

  8. java 并发包JUC下的CountDownLatch和CyclicBarrier的理解和区别

    推荐这篇帖子,讲得不错~ https://blog.csdn.net/liangyihuai/article/details/83106584

  9. 【排除解决】System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误

    前言: 今天项目发布上线,发布到正式环境验证功能的时候忽然方向之前做的一个图片合成的功能报错了提示:System.Runtime.InteropServices.ExternalException ( ...

  10. pytest + allure

    参考allure官网: https://docs.qameta.io/allure/#_pytest 1.使用命令pip install pytest-allure安装 注意:我遇到的一个现象,用命令 ...