Flex4 Popup窗口访问父窗口的5种方法以及相互传值
1.如果使用MVC框架,相信这并不是一个问题。而如果没有使用的话,可以用类似的方法设置一个单例,子窗口和父窗口通过这个单例来交互消息,如果需要解耦,请发送自定义事件。总之,只要按照MVC思路来做就可以了。
2.类似JS,在子窗口的构造函数里增加一个参数,将父窗口传参进去。MXML没有构造函数,用一个属性来保存父窗口引用也可以。这种方法在 前面一篇文章中有详细描述。 3.无论是createPopUp还是addPopUp,他们都有一个返回值,得到子窗口的实例。可以对这个实例监听remove事件,并在这个事件中直接读取子窗口需要返回给父窗口的属性。(记得要将这个事件最终移除) <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Panel x="94" y="178" width="503" height="347" layout="absolute"> <mx:TextInput x="134" y="64" id="tit_usr" text="username"/> <mx:TextInput x="134" y="125" id="tit_psw" text="password"/> <mx:Button x="171" y="209" label="Submit" click="mytw_click()"/> </mx:Panel> <mx:Script> <![CDATA[ import mx.containers.TitleWindow; import mx.managers.PopUpManager; import mx.controls.Text; private var tw:titlewindow=new titlewindow(); private function mytw_click():void{ if(tw.visible){ PopUpManager.removePopUp(tw); } PopUpManager.addPopUp(tw,this); PopUpManager.centerPopUp(tw); tw.addEventListener("tw_click",update); } private function update(event:Event):void{ tit_usr.text=tw.tw_usr.text; tit_psw.text=tw.tw_psw.text; PopUpManager.removePopUp(tw); } ]]> </mx:Script> </mx:Application> 弹出窗口: <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="498" height="368" showCloseButton="true" close="PopUpManager.removePopUp(this)"> <mx:Label x="96" y="67" text="username" width="97" height="26"/> <mx:Label x="96" y="128" text="password" width="97" height="24"/> <mx:TextInput x="217" y="65" id="tw_usr"/> <mx:TextInput x="217" y="126" id="tw_psw"/> <mx:Button x="228" y="239" label="Click" click="btn_click()"/> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; import mx.controls.Text; private function btn_click():void{ dispatchEvent(new Event("tw_click")); } ]]> </mx:Script> </mx:TitleWindow> 4.owner属性: ?
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Panel x="94" y="178" width="503" height="347" layout="absolute"> <mx:TextInput x="134" y="64" id="tit_usr" text="username"/> <mx:TextInput x="134" y="125" id="tit_psw" text="password"/> <mx:Button x="171" y="209" label="Submit" click="mytw_click()"/> </mx:Panel> <mx:Script> <![CDATA[ import mx.containers.TitleWindow; import mx.managers.PopUpManager; import mx.controls.Text; private var tw:titlewindow=new titlewindow(); private function mytw_click():void{ tw.owner = this; PopUpManager.addPopUp(tw,this); PopUpManager.centerPopUp(tw); } ]]> </mx:Script> </mx:Application> 弹出窗口代码:titlewindow.mxml <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="498" height="368" showCloseButton="true" close="PopUpManager.removePopUp(this)"> <mx:Label x="96" y="67" text="username" width="97" height="26"/> <mx:Label x="96" y="128" text="password" width="97" height="24"/> <mx:TextInput x="217" y="65" id="tw_usr"/> <mx:TextInput x="217" y="126" id="tw_psw"/> <mx:Button x="228" y="239" label="Click" click="btn_click()"/> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.managers.PopUpManager; import mx.controls.Text; private function btn_click():void{ //dispatchEvent(new Event("tw_click")); var a:PopUpDemo = this.owner as PopUpDemo; a.tit_usr.text = this.tw_usr.text; a.tit_psw.text = this.tw_psw.text; PopUpManager.removePopUp(this); } ]]> </mx:Script> </mx:TitleWindow> 5、 利用callback函数实现子窗口调用父窗口的函数 假设有父窗体P,在父窗体中弹出子窗体C,进行必要的操作后,返回父窗体。 a、弹出子窗体 var c:ChildForm = new ChildForm (); // 新建子窗体对象 PopUpManager.addPopUp(c,this,true); // 将子窗体加入PopUpManager中 c.studentId = ""; // 向子窗体传递参数 c.callbackFunction = this.refresh; ? // 子窗体中可以调用的父窗体函数(这里是子窗体关闭时,用来刷新父窗体的内容 PopUpManager.centerPopUp(c); // 子窗体弹出,居中 b、子窗体关闭时,调用父窗体 public var callbackFunction:Function; //回调函数 public var studentId:String = ""; public function doClose():void { ? if (isUpdate) {? callbackFunction.call(parent); ?// 调用父窗体的刷新函数 ? ? ?} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |