在开发具有子窗体,或者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. [刷题] 77 Combinations

    要求 给出两个整数n和k,在n个数字中选出k个数字的所有组合 示例 n=4 , k=2 [ [ 1, 2 ] , [ 1, 3 ] , [ 1, 4 ] , [ 2, 3 ] , [ 2, 4 ] , ...

  2. megacli修复raid1硬盘

    megacli修复raid1硬盘 By HKL, Tuesday 27 August 2019, 评论 [ Hardware Operating ] 使用megaraid修复raid1掉线硬盘 使用说 ...

  3. Linux_ACL文件访问控制列表

    一.ACL文件访问控制列表 前言 1️⃣:ACL-文件访问控制列表: 2️⃣:ACL可以针对单个用户,单个文件或目录来进行r.w.x的权限设定,特别适用于需要特殊权限的使用情况. 3️⃣:ACL就是可 ...

  4. 016.Python闭包函数以及locals和globals

    一 闭包函数 内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程叫做闭包,这个内函数叫做闭包函数 1.1 闭包函数语法 def outer(): a = 5 def inner(): pr ...

  5. Java public 和 private 访问修饰符

    何为封装 从事面向对象编程的 Java 程序员,不可能不知道封装,它是面向对象编程的精髓,非常重要. 那什么是封装?字面意思就是把摆在外面的东西包起来. 一句话,封装就是对外隐藏内部细节. 那为何要封 ...

  6. Java和JDK版本的关系-(转载)

    JAVA的版本最开始是1995年的JDK Alpha and Beta版本,第二年发布JDK1.0版本之后就是JDK1.1,JDK1.2.到1998年,不再叫JDK了,而是叫J2SE,但是版本号还是继 ...

  7. 9.random_os_sys_shutil_shelve_xml_hashlib

    此章未能精读,待回顾random模块import randomrandom.random() 随机生成一个0-1之间随机的浮点数random.randint(a,b) 随机生成一个a-b之间的整数 a ...

  8. 内建函数 iter()

    可以选择接受一个无参的可调用对象以及一个哨兵(结束)作为输入.当已这种方式使用时,iter()会创建i一个迭代器,然后重复调用用户提供的可调用对象,直到返回哨兵的值为止. import sys wit ...

  9. Stopper的使用

    工具类,抽象死循环逻辑的 import java.util.concurrent.atomic.AtomicBoolean; /** * if the process closes, a signal ...

  10. 标准自编码器(TensorFlow实现)

    由 Hinton 提出的标准自动编码机(标准自编码器)只有一个隐藏层,隐藏层中神经元的数量少于输入(和输出)层中神经元的数量,这会压缩网络中的信息,因此可以将隐藏层看作是一个压缩层,限定保留的信息. ...