Справка Flex: повторители, не повторяющиеся в элементе управления Accordian - PullRequest
1 голос
/ 22 ноября 2008

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

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


<mx:Box 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="init()"
>
<mx:ViewStack&gt
...
<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&gt

<mx:Box>

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

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

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

1 Ответ

1 голос
/ 24 ноября 2008

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...