在开发具有子窗体,或者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. 下载: www.bitmover.com/lmbench,最新版本3.0-a9

    软件说明: lmbench是个用于评价系统综合性能的多平台开源benchmark,能够测试包括文档读写.内存操作.进程创建销毁开销.网络等性能,测试方法简单.Lmbench是个多平台软件,因此能够对同 ...

  2. Linux压力测试软件Stress安装及使用指南2

    stress工具使用指南和结果分析 Linux压力测试软件Stress安装及使用指南     一.Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高 ...

  3. du -cs /var/lib/BackupPC/pc/10.1.60.211/目录名

    # du -cs /var/lib/BackupPC/pc/10.1.60.211/7870236 /var/lib/BackupPC/pc/10.1.60.211/7870236 总用量  

  4. 015.Python函数名的使用以及函数变量的操作

    一 函数名的使用 python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限 1.1 函数名是个特殊的变量,可以当做变量赋值 def func(): p ...

  5. C语言变量和函数命名规范

    C 语言变量和函数命名规范: 关于C语言变量和函数命名规范 据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则.命名规则对软件产品而言并不是"成败悠关&quo ...

  6. 6.1 tar:打包备份

    tar命令     在Linux系统里,tar是将多个文件打包在一起,并且可以实现解压打包的文件的命令.是系统管理员最常用的命令之一,tar命令不但可以实现对多个文件进行打包,还可以对多个文件打包后进 ...

  7. 利用TortoiseGit向Github上传文件

    利用TortoiseGit向Github上传文件 第一步:建一个新文件夹,作为本地仓库 第二步:右键选择设置为版本库 若弹出,确认即可 重新打开改文件,会发现多了一个绿色的小勾 在文件夹中会自动生成一 ...

  8. JS轮播图(网易云轮播图)

    JS 轮播图 写在前面 最聪明的人是最不愿浪费时间的人.--但丁 实现功能 图片自动切换 鼠标移入停止自动播放,显示按钮 点击按钮,实现前后翻 鼠标移入小圆圈,可以跳转到对应图片 点击左右两侧图片部分 ...

  9. [leetcode] 33. 搜索旋转排序数组(Java)

    33. 搜索旋转排序数组 说实话这题我连题都没有看懂....真是醉了 二分,没意思,直接交了- - https://www.jiuzhang.com/solutions/search-in-rotat ...

  10. GPU虚拟化技术详解

    GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...