2010-08-22 76 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的新值。

希望有所幫助。