Flex ViewStack с повторителем - повторитель размещается внизу - PullRequest
3 голосов
/ 03 сентября 2010

У меня проблема при создании ViewStack с повторителем вместе с другими компонентами (например, vBox) внутри ViewStack.Повторители размещаются в нижней части обзора.Несмотря на то, что повторитель указан перед другими компонентами, он расположен внизу.

Есть ли обходной путь, когда я могу нарисовать повторитель раньше других компонентов?задавал такой же вопрос на другом сайте, но никто не ответил.Я вставляю пример кода из их поста.Повторитель нарисован последним.

Спасибо

Вот пример:

<mx:ViewStack id="viewStack" width="100%" height="100%" backgroundColor="#FFFFFF" 
         backgroundAlpha="1" paddingLeft="5" paddingRight="5" paddingBottom="5">

    <mx:Repeater id="editorsRP" dataProvider="{dynamicFields}" 
          repeatEnd="organizeViewStack();" width="100%" height="100%">

        <editor:DynamicFieldEditor label="{FieldGroup(editorsRP.currentItem).name}" 
              width="100%" height="100%" fields="{FieldGroup(editorsRP.currentItem).fields}" dataProvider="{details}" />

    </mx:Repeater>

    <editor:NotesEditor id="notesEditor" width="100%" height="100%" label="Notes" 
         enabled="false" notesProvider="{attachment}" />

</mx:ViewStack>

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

Я считаю, что проблема в том, что dataProvider устанавливает / изменяет значение.

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

Если дочерние элементы ViewStack уже созданы, то дочерние элементы из репитера будут размещены после существующих дочерних элементов.

Например:

 <mx:TabNavigator width="500">
      <mx:VBox label="Static 1" />
      <mx:Repeater dataProvider="{['a','b','c']}">
          <mx:VBox label="From repeater" />
      </mx:Repeater>
      <mx:VBox label="Static 2" />
  </mx:TabNavigator>

В этом случае dataProvider устанавливается во время инициализации ретранслятора, поэтому вкладки отображаются в следующем порядке:

¦ Static 1 ¦ From Repeater ¦ From Repeater ¦ From Repeater ¦ Static 2 ¦

Однако, если значение dataProvider изменяется (или dataProvider отправляет CollectionChangeEvent), тогда 3 дочерних повторителя будут удалены, и добавлены новые дочерние элементы. Это оставит порядок табуляции:

¦ Static 1 ¦ Static 2 | From Repeater ¦ From Repeater ¦ From Repeater ¦

Я заметил, что вы подключили метод organizeViewStack к обработчику событий repeatEnd - хотя код метода не показан.

Это выглядит как лучший способ справиться с этим - изменить порядок детей после того, как они были установлены.

0 голосов
/ 03 сентября 2010

Я догадываюсь немного, но

Все дочерние элементы ViewStack должны быть контейнером. Повторитель не является контейнером. Таким образом, его размещение в качестве потомков ViewStack не имеет значения, потому что для всех намерений и целей оно игнорируется.

Однако, когда повторитель выполняется, он создает группу контейнеров и добавляет их в родительский элемент (AKA ViewStack); тем самым давая им Z-порядок, отличный от того, что вы могли ожидать от кода.

Вы пытаетесь создать много разных дочерних элементов ViewStack? Или вы ожидаете, что «DynamicFieldEditors» будут как-то сложены?

...