flex 中子窗口通过事件刷新父窗口中的数据

经常听到有人问子窗口操作完成之后,要刷新父窗口的数据怎么办??有人用过parentDocument;
有人使用过在子窗口中new一个父窗口的对象,然后通过这个对象访问父窗口的方法或属性;
。。。。。

第一种,也可以实现。但是第二种就没法理解了,严格来说子窗口是不能new父窗口的实例的。。。。最好的方法是用事件,今天就弄一个事件的例子吧,大牛们可以不看。新童鞋务必看看,有帮助的。。。。附件可直接下载

运行页面如下


点击新增

点击保存


代码如下:
总共3个文件,一个名为Parent的application,一个名为Child的titleWindow,还有一个是自定义的一个事件。
Parent.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
  3.                            xmlns:s="library://ns.adobe.com/flex/spark" 
  4.                            xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
  5.         <fx:Script>
  6.                 <![CDATA[
  7.                         import mx.collections.ArrayCollection;
  8.                         import mx.managers.PopUpManager;
  9.                         
  10.                         [Bindable]
  11.                         public var ac:ArrayCollection=new ArrayCollection([
  12.                                 {name:"周结",sex:"男",age:"23"},
  13.                                 {name:"小静",sex:"女",age:"19"},
  14.                                 {name:"小二",sex:"男",age:"20"},
  15.                                 {name:"大牛",sex:"男",age:"44"}
  16.                         ]); 
  17.                         private var child:Child = new Child();
  18.                         protected function button1_clickHandler(event:MouseEvent):void
  19.                         {
  20.                                 PopUpManager.addPopUp(child,this,true);
  21.                                 PopUpManager.centerPopUp(child);
  22.                                 child.addEventListener(MyEvent.SAVE_OK,saveSuccess);
  23.                         }
  24.                         
  25.                         private function saveSuccess(e:MyEvent):void
  26.                         {
  27.                                 ac.addItem(e.data);
  28.                         }
  29.                 ]]>
  30.         </fx:Script>

  31.         <fx:Declarations>
  32.                 <!-- 将非可视元素(例如服务、值对象)放在此处 -->
  33.         </fx:Declarations>
  34.         
  35.         <mx:AdvancedDataGrid id="adg1" designViewDataType="flat" dataProvider="{ac}" width="455" height="240" x="307" y="79">
  36.                 <mx:columns>
  37.                         <mx:AdvancedDataGridColumn headerText="姓名" dataField="name"/>
  38.                         <mx:AdvancedDataGridColumn headerText="年龄" dataField="age"/>
  39.                         <mx:AdvancedDataGridColumn headerText="性别" dataField="sex"/>
  40.                 </mx:columns>
  41.         </mx:AdvancedDataGrid>
  42.         <s:Button label="新增一条" click="button1_clickHandler(event)" x="518" y="365"/>
  43. </s:Application>
复制代码
Child.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
  3.                            xmlns:s="library://ns.adobe.com/flex/spark" 
  4.                            xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
  5.         <s:layout>
  6.                 <s:BasicLayout/>
  7.         </s:layout>

  8.         <fx:Script>
  9.                 <![CDATA[
  10.                         import mx.managers.PopUpManager;
  11.                         protected function button1_clickHandler(event:MouseEvent):void
  12.                         {
  13.                                 var obj:Object = new Object();
  14.                                 obj.name = dname.text;
  15.                                 obj.age = age.text;
  16.                                 obj.sex = sex.text;
  17.                                 this.dispatchEvent(new MyEvent(MyEvent.SAVE_OK,obj));
  18.                                 PopUpManager.removePopUp(this);
  19.                         }
  20.                 ]]>
  21.         </fx:Script>

  22.         <fx:Declarations>
  23.                 <!-- 将非可视元素(例如服务、值对象)放在此处 -->
  24.         </fx:Declarations>
  25.         <s:TextInput x="135" y="45" id="dname"/>
  26.         <s:TextInput x="135" y="83" id="age"/>
  27.         <s:TextInput x="135" y="127" id="sex"/>
  28.         <s:Button x="164" y="196" label="保存" click="button1_clickHandler(event)"/>
  29. </s:TitleWindow>
复制代码
MyEvent.as
  1. package event
  2. {
  3.         import flash.events.Event;
  4.         
  5.         public class MyEvent extends Event
  6.         {
  7.                 public static const SAVE_OK:String="saveOk";
  8.                 private var _data:Object;
  9.                 public function MyEvent(type:String,data:Object=null, bubbles:Boolean=false,cancelable:Boolean=false)
  10.                 {
  11.                         this._data=data;
  12.                         super(type, bubbles, cancelable);
  13.                 }

  14.                 public function get data():Object
  15.                 {
  16.                         return _data;
  17.                 }

  18.                 public function set data(value:Object):void
  19.                 {
  20.                         _data = value;
  21.                 }

  22.         }
  23. }
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值