flex4 父子页面数据交互实现(回调函数)
发布时间:2020-12-15 03:41:52 所属栏目:百科 来源:网络整理
导读:在网上看到一个父子页面数据交互的例子,自己也写了写。 首先父页面test.mxml ?xml version="1.0" encoding="utf-8"?s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.co
在网上看到一个父子页面数据交互的例子,自己也写了写。 首先父页面test.mxml <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" > <!-- 通过方法赋值的方式回调 --> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.managers.PopUpManager; [Bindable] public var testForm:TestForm = new TestForm; //等会将该方法赋给子页面定义的一个方法变量myCallBack public function callBack(obj:Object):void{ showLable.text = obj.name; } public function jump():void{ //弹出子页面 PopUpManager.addPopUp(testForm,this,false); //给子页面的方法变量赋为父页面的方法 testForm.myCallBack = this.callBack; //新建对象并给属性赋值 var obj:Object = new Object; obj.name = valueText.text; //直接调用子页面的方法将父页面的数据当参数传过去 testForm.initPage(obj); } ]]> </fx:Script> <s:VGroup horizontalAlign="center" verticalAlign="middle" width="80%" height="200"> <s:Label text="我是父页面,子页面传过来的值为:"/> <s:Label id = "showLable"/> <s:TextInput id="valueText"/> <s:Button label="点击将值传递到子页面" click="jump()"/> </s:VGroup> </s:Application> 子页面TestForm.mxml <?xml version="1.0" encoding="utf-8"?> <s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="400" minHeight="200" title="子页面" close="close()" > <fx:Script> <![CDATA[ import mx.managers.PopUpManager; import spark.components.PopUpAnchor; public var myCallBack:Function;//定义的方法变量 public var mainApp:Object = null;//格式需要这样 直接赋值null,有意向可深究一下 public function initPage(obj:Object):void{ showLabel.text = obj.name; } public function goBack():void{ //新建对象并赋值 传给子页面 var obj:Object = new Object; obj.name = valueText.text; //调用方法,并将对象参数传过去 myCallBack.call(mainApp,obj); } //关闭 public function close():void{ PopUpManager.removePopUp(this); } ]]> </fx:Script> <s:VGroup horizontalAlign="center" verticalAlign="middle" width="80%" height="200"> <s:Label text="我是子页面,父页面传过来的值为:"/> <s:Label id="showLabel" /> <s:TextInput id="valueText"/> <s:Button label="点击将值传递到父页面" click="goBack()"/> </s:VGroup> </s:TitleWindow> 这样父子页面就可以数据交互了。附上截图 这样写其实就是使用了闭包传递值了,但是这样会引起内存泄漏问题,可以想想在子页面封装好的obj传到了父页面,这样它的周期就与父页面绑在一起了,那他占用的内存啥时候释放啊~父页面销毁的时候?如果父页面是主页啥的那就。。。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |