flex之弹出窗口数据传递
弹出窗口:
利用PopUpManager我们可以把flex容器组件作为一种弹出窗口,这样也是便于我们将程序分块编写的方式之一。我们通常会自定义一个容器组件,作为弹出窗口的内容。
举一个例子来说明我们可能利用弹出窗口的地方。
protected?function?button1_clickHandler(event:MouseEvent):void{
?//这里是新创建一个弹出窗体对象,UserWin为自定义的一个容器组件对象
?????????var?win:UserWin?=?new?UserWin();?
????var?user:TblBsUserType?=?new?TblBsUserType();
//将user对象传递给弹出窗体,其中data为win里头的一个空对象。在win里边的代码是public?data:Object={};
????win.data.user?=?user;
//通过这种方法给win添加一个事件监听器
????win.addEventListener("sendData",onSendData);
????????????????PopUpManager.addPopUp(win,this,true);?
????????????????PopUpManager.centerPopUp(win);
????????????}
private?function?onSendData(e:Event):void{
????????????????var?user:UserType?=?e.currentTarget.data.user;
????????????????Alert.show(ro.toString());
????????????}如上注释,我们父窗体向子窗体传递数据的时候其实就是像子窗体的一个已存在的对象中动态添加数据属性即可。这一点是ecmascript的规范,也是他的一个很好的优点。
protected?function?button1_clickHandler(event:MouseEvent):void
????????????{
????????????????var?win:UserWin?=?new?UserWin();?
????????????????var?user:TblBsUserType?=?new?TblBsUserType();
????????????????win.data.user?=?user;
????????????????win.data.send?=?add;
????????????????//win.addEventListener("sendData",onSendData);
????????????????PopUpManager.addPopUp(win,this,true);?
????????????????PopUpManager.centerPopUp(win);
????????????}
//结果处理函数
private?function?add(user:TblBsUserType):void{
????????????????if(null?!=?user.butyId?&&?""?!=?user.butyId){
????????????????????ro.addUser(user);
????????????????}
????????????}
那么在弹出窗体中我们只需要调用data.send(data.user);就可以了。
备注:其实以上两种方法,为了使用方便,其实都还可以优化的地方,比如,事件处理方式,我们还可以在自定义组件中声明事件
<fx:Metadata>
??[Event(name="sendData",type="flash.events.Event")]
?</fx:Metadata>
让使用组件的mxml文档也能显示注册事件,如:<user:UserWin x="115" y="231" sendData=“sendDataHandler(event)”>
?</user:UserWin>
另外,在函数处理方式上,我们是利用函数绑定到对象的方式,来处理数据的,其实,为了使用接口的人更明确一些,我们可以把这个函数预先定义为组件的属性,比如:[Bindale]public?var sendData:Function;这样在创建组件对象的地方,就可以明确的把用户自定义的处理函数赋值给这个属性(sendData)。
总之:不管怎么样,事件处理和函数处理都可以完成我们的要求,任选其一即可。
?
[转]http://www.blogjava.net/samyang/articles/317950.html