2009-10-13 54 views
1

我有一個mxml組件,其中包含一個列出項目名稱和代碼版本的datagrid。我從datagrid綁定到名爲「selectedProjects」的公共變量的選定項目。但是如何在另一個mxml組件中訪問這個變量。我想在該組件的文本區域中選擇項目的名稱。怎麼做? 我甚至創建了第一個組件的實例,並使用了名爲selectedProjects變量的實例。但是我沒有在文字區域更新價值。如何在Flex中將一個mxml組件的值數組傳遞給另一個mxml組件?

這是第一部分的代碼,我在一個變量獲得所選項目名稱:

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

我現在在selectedProjects變量選擇的項目。

現在,這是我嘗試使用項目名稱的第二個組件。

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

我試圖更新Id的「projDocs」文本區域選擇的項目的價值,但我不明白這一點。請有人幫助我..

+0

在您選擇項目(在您的select()方法)後,您的TitleWindow是否會關閉?這不是說所選的項目名稱不再可用,所以你無法在其他課程中閱讀它嗎? – 2009-10-14 04:28:54

+0

哦..我是新來的flex和剛剛學習它,因爲我做我的項目。那麼如何傳遞變量? – Angeline 2009-10-14 04:51:02

+0

即使在窗口關閉後,是否還有任何方法傳遞數據? – Angeline 2009-10-14 05:04:34

回答

1

嗯,我發現自己出來的解決方案..

當然谷歌搜索。我遵循這個給出的方法tutorial.

我添加了對父應用程序的TextArea控件的引用。彈出組件使用該引用來更新第一個組件的TextArea。

在第一部分,我改變了創建彈出作爲

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 

然後在彈出的組件的功能,改變了選擇功能:

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


      PopUpManager.removePopUp(this); 
     } 

最後我在第一個組件文本區域框中更新項目名稱。

相關問題