2010-08-22 4 views
0

J'ai un fichier mxml principal (flex4) et je souhaite passer un paramètre (nom_utilisateur) à un composant dans un répertoire appelé composants.Passage d'un paramètre de flex main à un composant flex (4) avec liaison de données

Lorsque j'exécute le programme, le nom d'utilisateur n'est PAS envoyé du fichier principal au fichier du composant. (Fait intéressant, si vous rendez le composant visible, vous pouvez voir que le paramètre a été passé)

Nouveauté de flex/actionscript et ce paramètre passant est (sans aide) assez pénible à progresser.

Donc, l'aide serait très appréciée.

TIA.

J'ai piraté des fichiers beaucoup plus bas pour obtenir les deux fichiers suivants:

PRINCIPAUX

<?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> 

COMPOSANTE FICHIER

<?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> 

Répondre

1

Si vous voulez simplement obtenir le USER_NAME de la principale app dans votre composant TitleWindow, il suffit de définir win3.user_name = nom_utilisateur après avoir instancié win3. Si vous cherchez à le lier à votre win3 récemment instancié (ce que vous feriez si l'on s'attendait à ce que le nom d'utilisateur change), alors vous devez regarder dans la classe auxiliaire de BindUtils. La manière habituelle d'obtenir des données entre une application et une boîte de dialogue est de définir la valeur après avoir instancié votre boîte de dialogue, puis d'ajouter un écouteur à votre boîte de dialogue pour que votre application soit notifiée si quelque chose a changé. Si vous écoutez l'événement Close, par exemple, vous pouvez obtenir la valeur de l'événement comme suit: (event.currentTarget comme EditAccountForm) .user_name dans le gestionnaire d'événements de votre application.

Une autre méthode courante consiste à faire en sorte que votre fenêtre envoie un événement personnalisé (que votre application principale a ajouté un écouteur à la boîte de dialogue pour) contenant la nouvelle valeur de nom_utilisateur.

Espérons que ça aide.

Questions connexes