2011-03-28 53 views
2

我有2個面板一個ViewStack:如何訪問Flex 3 ViewStack中的其他面板?

<mx:ViewStack id="viewstack1" height="243"> 
<mx:Panel id="gridPanel"> 
    <mx:DataGrid id="grid" right="10" left="10" top="10" bottom="10" width="300" height="150" itemClick="showDetails(event)"> 
     <mx:columns> 
       <mx:DataGridColumn headerText="ID" dataField="Id"/> 
       <mx:DataGridColumn headerText="Summary" dataField="Summary"/> 
      </mx:columns> 
     </mx:DataGrid> 
    </mx:Panel> 
    <mx:Panel id="detailsPanel"> 
     <mx:HBox width="100%" height="100%"> 
      <mx:VBox height="100%" width="228" id="detailsVbox"> 
       <mx:Label text="Label" id="itemTitle"/> 
       <mx:Text text="Text" id="itemSummary"/> 
       <mx:DataGrid height="97"> 
        <mx:columns> 
         <mx:DataGridColumn headerText="Property" dataField="col1"/> 
         <mx:DataGridColumn headerText="Value" dataField="col2"/> 
        </mx:columns> 
       </mx:DataGrid> 
      </mx:VBox> 
      <mx:Image source="images/BackButton.png" width="50" height="50" click="viewstack1.selectedChild = gridPanel"/> 

     </mx:HBox> 
</mx:Panel>  
</mx:ViewStack> 

我希望有用戶在第一面板中點擊一個網格項,然後在第二面板的面板裝載數據。我可以獲取itemClicked處理程序中單擊項目的索引值,但是如何訪問detailsPanel以根據Grid中的行信息設置值?

回答

2

我不知道這是否是你想要的,但你可以做這樣的事情:

private function showDetails(event:ListEvent):void { 
    itemTitle.text = event.itemRenderer.data.Id; 
    itemSummary.text = event.itemRenderer.data.Summary; 

    //assuming that the datagrid ID from the details panel is: detailsDatagrid 
    detailsDatagrid.dataProvider = event.itemRenderer.data.Properties; 

    viewstack1.selectedChild = detailsPanel; 
} 

爲了這個工作,你也將有一個創建策略增加則ViewStack。

<mx:ViewStack id="viewstack1" height="243" creationPolicy="all"> 

這樣,所有的面板將要創建的創建則ViewStack時(默認情況下,他們纔會創建在需要的時候)。這可確保在面板可見之前,您可以參考detailsPanelitemTitleitemSummary等。

+0

爲+1的creationPolicy – 2011-03-29 21:36:35

0

至於我最好的方法是使用數據綁定。只需引入其他字段

[Bindable] 
private var detailsDataProvider:ArrayCollection; 

並用showDetails方法填充它的詳細信息。如果需要以異步方式獲得(從服務器,例如)的詳細數據,直到接收到的數據可以重置當前的細節值:

detailsDataProvider = null; 

然後用服務器的數據填充它。

最終的變化進行了詳細的數據網格:

<mx:DataGrid height="97" dataProvider="{detailsDataProvider}"> 

希望它能幫助。

0

這裏這段代碼將解釋'stackview'的簡單例子。使用這可以調用面板相同。