flex4 父子页面数据交互实现(回调函数)

在网上看到一个父子页面数据交互的例子,自己也写了写。

首先父页面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传到了父页面,这样它的周期就与父页面绑在一起了,那他占用的内存啥时候释放啊~父页面销毁的时候?如果父页面是主页啥的那就。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值