zoukankan      html  css  js  c++  java
  • Flex中利用事件机制进行主程序与子窗体间参数传递

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

    Flex中利用事件机制进行主程序与子窗体间参数传递

    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

  • 相关阅读:
    【css】用纯 CSS 判断鼠标进入的方向
    【window】系统禁止运行脚本
    【go】VSCode配置Go插件和debug设置
    【PHP】php之Trait详解
    【layui】laydata 自定义日期之外格式的处理办法
    【PHP】防止视频资源被下载的解决办法
    【Markdown】 编辑器Editor.md集成使用
    代码之间为什么要加空格?
    求求你,别问了,Java字符串是不可变的
    养生吧,程序员!
  • 原文地址:https://www.cnblogs.com/xxjudfc/p/3709895.html
Copyright © 2011-2022 走看看