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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |




