2009-10-13 6 views
1

J'ai un composant mxml avec une liste de données répertoriant les noms de projet et les versions de code. J'ai les projets sélectionnés à partir de la grille de données liée à une variable publique nommée "selectedProjects". Mais comment accéder à cette variable dans un autre composant mxml. Je veux le nom du projet sélectionné dans la zone de texte de ce composant. comment faire ça? J'ai même créé une instance du premier composant en utilisant celle appelée la variable selectedProjects. Mais je n'obtiens pas la valeur mise à jour dans la zone de texte.comment passer un tableau de valeurs d'un composant mxml à un autre dans Flex?

C'est le code pour le premier composant où j'obtenir le nom de projets sélectionnés dans une variable:

<?xml version="1.0" encoding="utf-8"?> 
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
      creationComplete="handleCreationComplete();" 
      width="800" height="600"> 
<mx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 
     import mx.managers.PopUpManager; 
     import mx.collections.ArrayCollection; 
     import mx.events.ItemClickEvent; 

     [Bindable] public var selectedProjects:Array; 

     private function handleCreationComplete():void { 
          PopUpManager.centerPopUp(this); 
     } 

     public var pages:ArrayCollection=new ArrayCollection([ 
      {label:"10"}, 
      {label:"20"},]); 

     public var projectList:ArrayCollection=new ArrayCollection([ 

      {ItemName:"User Requirement Specification",ItemCodeVersion:"URS - 1"}, 
      {ItemName:"User Requirement Specification",ItemCodeVersion:"URS - 2"}, 
      {ItemName:"Software Requirement Specification",ItemCodeVersion:"SRS - 2.1"}, 
      {ItemName:"Software Design Specification",ItemCodeVersion:"SDS - 2"}, 
      {ItemName:"Software Design Specification",ItemCodeVersion:"SRS - 1.1"}, 
      {ItemName:"User Manual",ItemCodeVersion:"User Manual - 1"}, 
      {ItemName:"User Manual",ItemCodeVersion:"User Manual - 2.1"},]); 


     private function close():void 
     { 
     PopUpManager.removePopUp(this); 
     } 

     private function select():void 
     { 
      Alert.show(projectListDG.selectedItem.ItemName); 
      PopUpManager.removePopUp(this); 
     } 

    ]]>          
</mx:Script> 

<mx:Binding source="projectListDG.selectedItems" destination="selectedProjects" /> 
<mx:Label styleName="labelHeading" text="Project Documents List"/> 

<mx:Panel width="100%" height="100%" layout="vertical" title="Documents List" > 
    <mx:HBox> 
     <mx:Label text="Show"/> 
     <mx:ComboBox dataProvider="{pages}" width="60" /> 
     <mx:Label text="results per page" /> 
    </mx:HBox> 

    <mx:DataGrid id="projectListDG" dataProvider="{projectList}" allowMultipleSelection="true" rowCount="10" width="100%" height="100%"> 
     <mx:columns> 

      <mx:DataGridColumn headerText="Select" itemRenderer="mx.controls.CheckBox" textAlign="center" width="50"/> 
      <mx:DataGridColumn headerText="Item Name" dataField="ItemName" textAlign="center" /> 
      <mx:DataGridColumn headerText="Item Code - Version" dataField="ItemCodeVersion" textAlign="center" width="150 " /> 

     </mx:columns> 
    </mx:DataGrid> 

     <mx:Label text="{projectListDG.selectedItem.ItemName}"/> 
</mx:Panel> 

     <mx:HBox horizontalAlign="center" width="100%"> 
     <mx:Button label="Select" click="select();"/> 
     <mx:Button label="Cancel" click="close();"/> 
     </mx:HBox> 
</mx:TitleWindow> 

J'ai maintenant les projets sélectionnés dans la variable selectedProjects.

Maintenant, c'est le deuxième composant dans lequel j'essaie d'utiliser le nom du projet.

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"> 
<mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.core.IFlexDisplayObject; 
     import mx.managers.PopUpManager; 
     import mx.containers.TitleWindow;    

     [Bindable]  
     public var projectList:projDocsLookUp=new projDocsLookUp(); 

     //Datagrid 
     [Bindable] 
     private var defectDetails:ArrayCollection = new ArrayCollection([ 
      {Select:true},   
     ]);   

     private function projDocsPopUp():void{ 
      var helpWindow:TitleWindow = TitleWindow(PopUpManager.createPopUp(this, projDocsLookUp, true)); 
      helpWindow.title="Project Documents List"; 
     } 
       ]]> 
</mx:Script> 
<mx:Label styleName="labelHeading" text="Defect Entry - Verification" /> 

    <mx:Panel width="100%" height="30%" layout="vertical" title="Review Report Details"> 
     <mx:VBox width="100%"> 
      <mx:FormItem label="Project Name:" width="100%"> 
       <mx:Text text="IPMS"/>    
      </mx:FormItem> 
      <mx:HRule width="100%"/>    
     <mx:VBox>       
      <mx:FormItem label="Project Documents:"> 
      <mx:HBox> 
<!--text="{projectList.projectListDG.selectedItem.ItemName}"--> 
             <mx:TextArea id="projDocs" width="150" text="{projectList.selectedProjects}" />//text area field is not updated. 
           <mx:Button width="30" label=".." click="projDocsPopUp();"/> 
      </mx:HBox> 
      </mx:FormItem> 

      </mx:VBox> 
       </mx:Panel> 

<mx:Panel width="100%" height="50%" layout="vertical" title="Defect Details" > 

<mx:DataGrid id="defectDG" dataProvider="{defectDetails}"   variableRowHeight="true" width="100%" height="75" > 

    <mx:columns> 
    <mx:DataGridColumn dataField="Select" itemRenderer="mx.controls.CheckBox" width="50" textAlign="center" /> 

    <mx:DataGridColumn dataField="Defect Id" itemRenderer="mx.controls.TextInput" textAlign="center"/> 

    <mx:DataGridColumn dataField="Status" itemRenderer="mx.controls.ComboBox" textAlign="center"/>         
</mx:columns> 
</mx:DataGrid> 


</mx:Panel> 

    </mx:VBox> 

je tente de mettre à jour la valeur des projets sélectionnés dans la zone de texte de Id « projDocs », mais je ne comprends pas .. S'il vous plaît quelqu'un me aider ..

+0

Votre TitleWindow ne se ferme-t-il pas après la sélection de l'élément (dans votre méthode select())? Cela ne signifie-t-il pas que le nom du projet sélectionné n'est plus disponible, donc vous ne seriez pas capable de le lire dans l'autre classe? –

+0

Oh .. Je suis nouveau à fléchir et juste l'apprendre comme je fais mon projet. Alors, comment passer la variable? – Angeline

+0

N'y a-t-il aucune méthode pour transmettre les données même après la fermeture de la fenêtre? – Angeline

Répondre

1

Eh bien, je trouve la solution par moi-même ..

Googling bien sûr. J'ai suivi la méthode donnée dans ce tutorial.

J'ai ajouté une référence au contrôle TextArea de l'application parente. Le composant contextuel utilise cette référence pour mettre à jour TextArea du premier composant.

Dans le premier volet, j'ai changé la fonction qui crée la pop comme

private function projDocsPopUp():void{ 

      var helpWindow:projDocsLookUp = projDocsLookUp(PopUpManager.createPopUp(this, projDocsLookUp, true)); 
      helpWindow.title="Project Documents List"; 
      helpWindow.showCloseButton=true; 
      helpWindow.targetComponent=projDocs; //I get the value returned by the pop up window here 

Et puis dans le composant pop-up, a changé la fonction de sélection comme:

private function select():void 
     { 
      var i:int; 
      for(i=0;i<selectedProjects.length;i++) 
       { 
       targetComponent.text+=selectedProjects[i].ItemName+","; 
      } 


      PopUpManager.removePopUp(this); 
     } 

Et enfin, je obtenir le nom du projet mis à jour dans la zone de texte du premier composant.

Questions connexes