Flex - передача данных в представления с вкладками - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть проект, который имеет 4 представления, где я использую tabBar с viewStack / NavigatorContent.У меня есть пара HTTPServices, настроенных для сбора XML и преобразования в Bindable ArrayCollections.Когда и как лучше всего передать эти данные таким элементам, как диаграммы, dataGrids и т. Д., Которые не видны до тех пор, пока пользователь не нажмет на вкладку?Прямо сейчас у меня есть каждый элемент, настроенный с помощью функции creationComplete, которые затем передают его.Хотя кажется, что это работает, это лучший способ, или есть что-то лучше, а может быть, даже быстрее?

Спасибо, Марк

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Лучший способ - использовать привязку данных.Допустим, у вас есть главный контейнер, который содержит ViewStack компонентов ведьмы, представляющих содержимое вкладок.Таким образом, у вас должно быть [Bindable] свойств для данных в главном контейнере, таких как:

[Bindable]
private var chartData:ArrayCollection;

[Bindable]
private var dataGridData:ArrayCollection;

и т. Д.

Так что для компонента, содержащего диаграмму, вы должны заполнить данные диаграммы даннымиСвязывание:

<ViewStack>
    …
    <MyChartsTab chartData="{chartData}" />
    …
</ViewStack>

И, конечно, вы должны ввести то же самое поле chartData (убедитесь, что оно public) в вашем MyChartsTab компоненте.Ваши диаграммы там также могут быть заполнены привязкой данных.

Таким образом, после получения данных вы просто заполняете свои поля в основном компоненте, а привязка данных выполняет остальную работу, не заботясь об инициализации с вашей стороны.

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

При создании ваших представлений убедитесь, что вы разрешаете открытую переменную (например, «dataProvider»), где вы можете связывать необходимые данные.Вот так:

<mx:ViewStack>
        <s:NavigatorContent>
            <SomeComponent dataProvider="{someData}" />
        </s:NavigatorContent>
        <s:NavigatorContent>
            <SomeComponent2 dataProvider="{someData}" />
        </s:NavigatorContent>
    </mx:ViewStack>

И в пользовательском компоненте у вас будет:

private var _data:Object; // use strong typing if possible

public function set dataProvider(value:Object):void // use strong typing if possible
{
    this._data = value;
}

public function get dataProvider():Object
{
   return this._data;
}
...