Flex - передача данных в представления с вкладками

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

Спасибо Марк

2 ответа

Решение

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

[Bindable]
private var chartData:ArrayCollection;

[Bindable]
private var dataGridData:ArrayCollection;

и т.п.

Поэтому для компонента, содержащего диаграмму, вы должны заполнить данные диаграммы привязкой данных:

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

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

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

При создании ваших представлений убедитесь, что вы разрешаете открытую переменную (например, "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;
}
Другие вопросы по тегам