2010-08-22 80 views
0

我有一个主要的mxml文件(flex4),并希望将参数(user_name)传递给名为components的目录中的组件。将参数从flex main传递到具有数据绑定的flex(4)组件

当我运行该程序时,user_name不是从主发送到组件文件。 (有趣的是,如果你使组件可见,你可以看到参数已经通过)

Flex/actionscript的新手和这个参数传递是(没有帮助)相当痛苦的进展。

所以,非常感谢帮助。

TIA。

我已经破解更大的文件下来,以获得以下两个文件:

主要

<?xml version="1.0" encoding="utf-8"?> 
<s:Application    
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
      xmlns:fx="http://ns.adobe.com/mxml/2009"     
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:components="components.*"> 

<mx:Button id="editAccount" label="Edit Account" fontSize="16" color="#000000" x="100" y="125" click="AccountForm(event)" /> 

<components:editAccountForm visible="false" user_name = "username from main" /> 

<fx:Script> 
    <![CDATA[ 
     import components.editAccountForm; 
     import mx.managers.PopUpManager; 

     private function AccountForm(e:MouseEvent):void 
     { 
      var win3:editAccountForm = new editAccountForm(); 
      PopUpManager.addPopUp(win3,this,true); 
      PopUpManager.centerPopUp(win3); 
     }  
    ]]> 
</fx:Script> 
</s:Application> 

组件文件

<?xml version="1.0" encoding="utf-8"?> 

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
      layout="vertical" title="Edit Account Details" x="50" y="600" > 


<mx:Form width="100%" height="100%"> 
    <mx:FormItem label=""> 
     <mx:Label width="300" textAlign="center" text="{user_name}"/> 
    </mx:FormItem> 
    <mx:FormItem label="Enter your new Email Address"> 
     <mx:TextInput id="email_address2" width="300" maxChars="128" contentBackgroundColor="#F5DC0C"/> 
    </mx:FormItem> 
</mx:Form> 
<mx:HBox width="100%" horizontalAlign="center"> 
    <mx:Button id="close" label="Close" click="PopUpManager.removePopUp(this)" /> 
</mx:HBox> 


<mx:Script> 
    <![CDATA[ 
     [Bindable] 
     public var user_name:String = "username from Component";  
    ]]> 
</mx:Script> 


<mx:Script> 
    <![CDATA[ 
     import mx.core.IFlexDisplayObject; 
     import mx.events.CloseEvent; 
     import mx.managers.PopUpManager; 

     private function closeWindow(e:CloseEvent):void 
     { 
      PopUpManager.removePopUp(e.target as IFlexDisplayObject); 
     } 
    ]]> 
</mx:Script> 


</mx:TitleWindow> 

回答

1

如果你只是想从主的USER_NAME应用程序插入到TitleWindow组件中,只需在实例化win3后设置win3.user_name = user_name即可。如果你想将它绑定到新实例化的win3上(如果user_name需要改变,你会这么做),那么你需要查看BindUtils的helper类。

在应用程序和对话框之间获取数据的典型方式是在实例化对话框之后设置值,然后将侦听器添加到对话框中,以便在发生某些更改时收到通知。例如,如果您正在侦听Close事件,则可以在事件处理程序中从事件中获取值,如下所示:(event.currentTarget为EditAccountForm).user_name。

另一种常见的方法是让你的窗口发送一个自定义事件(你的主应用程序为对话框添加了一个侦听器),其中包含user_name的新值。

希望有所帮助。