加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex中将子窗口中添加的数据即时显示在父窗口中的方法

发布时间:2020-12-15 01:09:48 所属栏目:百科 来源:网络整理
导读:Flex开发中遇到一个问题,就是在弹出的子窗口中怎么将添加的内容即时地显示在父窗口中呢?一般的思路是添加了数据后父窗口再从数据源中读取数据展现出来,可是这麻烦且不说,还增加了服务器的负担。 在网上的一个论坛的帖子里我找到了解决此问题的方法,那就

Flex开发中遇到一个问题,就是在弹出的子窗口中怎么将添加的内容即时地显示在父窗口中呢?一般的思路是添加了数据后父窗口再从数据源中读取数据展现出来,可是这麻烦且不说,还增加了服务器的负担。

在网上的一个论坛的帖子里我找到了解决此问题的方法,那就是在父窗口中给子窗口添加一个监视器,当子窗口有变化时将触动此事件,然后再处理此过程。好了,思路就说到这,下面让我们开始这神奇的旅程!

首先是父窗口程序:RefreshData.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:Style source="RefreshData.css"/>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import event.MyEvent;
			
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.managers.PopUpManager;
			//绑定一个数据源
			[Bindable]
			var ac:ArrayCollection=new ArrayCollection(
			[{name:"张三",age:18,sex:"男"},{name:"李四",age:20,sex:"女"},{name:"王五",age:22,{name:"马六",sex:"男"}
			]);
			var child:Child=new Child();  //创建一个子窗口的实例
			protected function button1_clickHandler(event:MouseEvent):void
			{
				// TODO Auto-generated method stub
				PopUpManager.addPopUp(child,this,true);   //添加子窗口
				PopUpManager.centerPopUp(child);   //让添加的子窗口居中显示
				child.addEventListener(MyEvent.SAVE_OK,saveSuccess);  //最为重要的一步,给子窗口添加一个监听器
				child.name2.text="";    //确保每一次添加子窗口时“姓名”文本域为空,下面雷同
				child.age.text="";
				child.sex.text="";
			}
			//监听器的函数
			function saveSuccess(e:MyEvent):void{
				ac.addItem(e.data);    //从监听程序中取得数据并添加到表格中
				Alert.show("保存成功!","提示",Alert.OK);  
			}
		]]>
	</fx:Script>
	<mx:AdvancedDataGrid id="adg1" x="183" y="92" width="442" designViewDataType="flat" dataProvider="{ac}">
		<mx:columns>
			<mx:AdvancedDataGridColumn dataField="name" headerText="姓名"/>
			<mx:AdvancedDataGridColumn dataField="age" headerText="年龄"/>
			<mx:AdvancedDataGridColumn dataField="sex" headerText="性别"/>
		</mx:columns>
	</mx:AdvancedDataGrid>
	<s:Button x="358" y="336" width="152" height="30" label="再添加一个" click="button1_clickHandler(event)"/>
</s:Application>

其中子窗口组件:Child.mxml,代码如下:


<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
		 xmlns:s="library://ns.adobe.com/flex/spark"
		 xmlns:mx="library://ns.adobe.com/flex/mx"
		 width="400" height="300" fontSize="18">
	
	<fx:Script>
		<![CDATA[
			import event.MyEvent;
			
			import mx.events.CloseEvent;
			import mx.managers.PopUpManager;
			protected function add_clickHandler(event:MouseEvent):void
			{
				// TODO Auto-generated method stub
				var obj:Object=new Object();
				obj.name=name2.text;
				obj.age=age.text;
				obj.sex=sex.text;
				this.dispatchEvent(new MyEvent(MyEvent.SAVE_OK,obj));
				PopUpManager.removePopUp(this);
			}
			//下面是关闭窗口的执行事件
			protected function addUser_closeHandler(event:CloseEvent):void
			{
				// TODO Auto-generated method stub
				this.addUser.visible=false;
				PopUpManager.removePopUp(this);
			}
			
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:TitleWindow id="addUser" width="401" height="300" close="addUser_closeHandler(event)" title="添加用户" >
		<s:Label x="147" y="9" width="119" height="34" fontSize="25" fontWeight="bold" text="用户添加"
				 verticalAlign="middle"/>
		<s:TextInput id="name2" x="99" y="60"/>
		<s:Label x="25" y="61" height="27" text="姓名:" verticalAlign="middle"/>
		<s:Label x="25" y="112" text="年龄:"/>
		<s:TextInput id="age" x="99" y="112"/>
		<s:TextInput id="sex" x="99" y="160"/>
		<s:Label x="28" y="169" text="性别:"/>
		<s:Button id="add" x="172" y="219" height="33" label="添加" click="add_clickHandler(event)"/>
	</s:TitleWindow>
	
</s:Group>

一个ActionScript文件:MyEvent.as

package event
{
	import flash.events.Event;
	
	public class MyEvent extends Event
	{
		public static const SAVE_OK:String="saveOk";
		private var _data:Object;
		public function MyEvent(type:String,data:Object=null,bubbles:Boolean=false,cancelable:Boolean=false)
		{
			this._data=data;
			super(type,bubbles,cancelable);
		}
		
		public function get data():Object{
		 return _data;
		}
		public function set data(value:Object):void{
		 	_data=value;
		}
	}
}

再就是一个CSS文件RefreshData.css,代码如下:

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";


global
{
	font-size: 18;
	font-family: "中易宋体";
}

好了,就这些代码了,详细的讲解在代码中以注释的形式出现,不是很难理解!

这是我的整个工程图:


下面是程序执行的截图:

?进入程序时:


点击“再添加一个”,弹出“添加用户”,然后添加数据:



点击“添加”按钮时,会提示你成功添加,刚才添加的数据即时显示出来了,是不是很给力啊?




本文已移至http://www.it161.com/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读