Справка Flex: повторители не повторяются в элементе управления Accordian

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

У меня есть аккордеон в ViewStack (из которых этот ViewStack также находится в другом ViewStack верхнего уровня). У меня в каждом дочернем элементе управления аккордеоном есть повторитель. Компонент выглядит так:


<mx:Box 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="init()"
>
<mx:ViewStack>
...
<mx:Accordion creationComplete="accordianInit()">
    <mx:Box label="Groups" width="100%">
        <mx:Repeater id="rpGroups" width="100%">
            <mx:CheckBox id="chkGroups" 
                label="{rpGroups.currentItem.name}" />
        </mx:Repeater>
    </mx:Box>
    <mx:Box label="Contacts">
        <mx:Repeater id="rpContacts">
            <mx:CheckBox id="chkContacts" 
                label=quot;{rpContacts.currentItem.full_name}" />
        </mx:Repeater>
    </mx:Box>
</mx:Accordion>
...
</mx:ViewStack>

<mx:Box>

Проблема в том, что если я свяжу 2 повторителя в функции init, то оба повторителя не будут показывать никаких данных. Если я привяжу повторители в функции accordianInit, то только первый повторитель (rpGroups) будет привязан к данным...

Где я должен связывать данные с повторителями, чтобы оба повторителя повторялись правильно?

Надеюсь, это имеет смысл, если я не могу уточнить больше, любая помощь приветствуется.


person mmattax    schedule 22.11.2008    source источник


Ответы (1)


Привяжите dataProvider репитера к источнику в самом MXML:

<mx:Repeater dataProvider="{the_data}" ... />

Причина, по которой вы видите такое поведение, заключается в том, что Accordion (и ViewStack) не сразу создает все свои дочерние элементы. Он создает только видимый дочерний элемент (итак, первый Box и первый дочерний элемент ViewStack изначально).

Из-за этого поведения, когда вы пытаетесь назначить данные повторителям в первом обработчике событий init(), у повторителей нет созданного контейнера для повторения дочерних элементов. Когда вы назначаете данные ретрансляторам вaccordionInit(), создается только первый Box, поэтому работает только первый ретранслятор.

Если вы не хотите привязываться к данным с помощью атрибута dataProvider тега Repeater (как я показал выше), вы можете использовать обработчик изменений на Accordion, чтобы установить данные повторителя по мере того, как пользователь меняет панели (потому что когда пользователь щелкает панели, они создаются инфраструктурой Flex).

Все это происходит из свойства creationPolicy: http://livedocs.adobe.com/flex/3/html/layoutperformance_05.html

person darronschall    schedule 23.11.2008