Как получить доступ к другим панелям в Flex 3 ViewStack?

У меня есть 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, чтобы установить значения на основе информации о строке из сетки?


person WTLNewbie    schedule 28.03.2011    source источник


Ответы (3)


Я не уверен, что это то, что вы хотите, но вы можете сделать что-то вроде этого:

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;
}

Чтобы это работало, вам также нужно будет добавить политику создания в стек представлений.

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

Таким образом, все панели будут создаваться при создании вьюстека (по умолчанию они создаются только тогда, когда они необходимы). Это гарантирует, что у вас будет ссылка на detailsPanel, itemTitle, itemSummary и т. д. до того, как панель станет видимой.

person bmleite    schedule 28.03.2011

Как по мне, лучше всего использовать привязку данных. Просто введите дополнительное поле

[Bindable]
private var detailsDataProvider:ArrayCollection;

И заполните его деталями в методе showDetails. Если данные о деталях необходимо получить асинхронно (например, с сервера), вы можете сбросить текущее значение деталей до получения данных:

detailsDataProvider = null;

А затем заполнить его данными сервера.

Окончательные изменения в подробной сетке данных:

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

Надеюсь, поможет.

person Constantiner    schedule 29.03.2011

Здесь этот код объяснит простой пример 'stackview'. Используя это, можно вызвать панель так же.

person Raju    schedule 26.04.2011