/ / Flex ViewStack avec un répéteur - Le répéteur est placé en bas - flex, répéteur, viewstack

Flex ViewStack avec répéteur - Le répéteur est placé en bas - flex, repeater, viewstack

J'ai un problème lors de la création d'un ViewStack, avecun répéteur avec d'autres composants (c'est-à-dire vBox) à l'intérieur du ViewStack. Les répéteurs sont placés en bas de la vue. Bien que le répéteur soit répertorié avant les autres composants, il est placé en bas.

Existe-t-il une solution de contournement permettant de dessiner le répéteur avant les autres composants?

J'ai googlé ceci et quelqu'un d'autre a posé la même question sur un autre site, mais personne n'a répondu. Je colle un exemple de code de leur message. Le répéteur est tiré en dernier.

Merci

Voici un exemple:

<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>

Réponses:

2 pour la réponse № 1

Je crois que le problème est lorsque le dataProvider est d'avoir sa valeur définie / modifiée.

Ce n'est pas indiqué dans le code ci-dessus, donc c'est difficileà savoir. Cependant, chaque fois que la valeur de ceci est modifiée, les enfants existants créés par le répéteur seront supprimés du parent et de nouveaux seront ajoutés.

Si les enfants de ViewStack ont ​​déjà été créés, les enfants du répéteur seront placés après les enfants existants.

Par exemple:

 <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>

Dans ce cas, le dataProvider est défini lors de l'initialisation du répéteur, donc les onglets apparaissent dans l'ordre:

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

Cependant, si la valeur de dataProvider change(ou le dataProvider distribue un CollectionChangeEvent), les 3 enfants répéteurs seraient supprimés et de nouveaux enfants ajoutés. Cela laisserait l'ordre de tabulation:

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

Je remarque que vous avez câblé un organizeViewStack méthode à la repeatEnd gestionnaire d'événements - bien que le code de la méthode ne soit pas affiché.

Cela semble être la meilleure façon de gérer cela - remanier l'ordre des enfants une fois qu'ils ont été définis.


0 pour la réponse № 2

Je devine un peu, mais

Tous les enfants d'un ViewStack doivent être un conteneur. Le répéteur n'est pas un conteneur. Par conséquent, son placement en tant qu'enfants ViewStack n'est pas pertinent, car à toutes fins utiles, il est ignoré.

Cependant, lorsque le répéteur s'exécute, il crée un tas de conteneurs et les ajoute au parent (AKA ViewStack); leur donnant ainsi un ordre Z différent de ce que vous pourriez attendre du code.

Essayez-vous de créer de nombreux enfants différents du ViewStack? Ou vous attendez-vous à ce que les "DynamicFieldEditors" soient empilés d'une manière ou d'une autre?