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

У меня есть ViewStack с 2 панелями:

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

Ответы [ 3 ]

2 голосов
/ 29 марта 2011

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

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 и т. Д. ... до того, как панель станет видимой.

0 голосов
/ 26 апреля 2011

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

0 голосов
/ 30 марта 2011

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

[Bindable]
private var detailsDataProvider:ArrayCollection;

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

detailsDataProvider = null;

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

Последние изменения в деталях сетки данных:

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

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

...