2010-09-02 4 views
3

J'ai un problème lors de la création d'un ViewStack, avec un répéteur et d'autres composants (par exemple, vBox) dans ViewStack. Les répéteurs sont placés au bas de la vue. Bien que le répéteur soit listé avant les autres composants, il est placé en bas.Flex ViewStack avec un répéteur - Le répéteur est placé en bas

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

J'ai fait une recherche sur Google et quelqu'un d'autre a posé la même question sur un autre site, mais personne n'a répondu. Je colle un échantillon de code de leur publication. Le répéteur est dessiné 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épondre

0

Je devine un peu, mais

Tous les enfants de un ViewStack doit être un récipient. Le répéteur n'est pas un conteneur. Donc, c'est le placement comme un enfant ViewStack n'est pas pertinent, car à toutes fins utiles, il est ignoré. Toutefois, lorsque le répéteur s'exécute, il crée un groupe de conteneurs et les ajoute au parent (AKA ViewStack); leur donnant ainsi un Z-ordre différent de ce que vous pourriez attendre du code.

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

+0

Beaucoup d'enfants différents de ViewStack. Pour être plus clair, j'ai un tabBar et à l'intérieur de leur, j'ai un ViewStack. Je crée plusieurs onglets qui existent toujours. J'utilise le répéteur pour créer des onglets basés sur des données dans le tableau.Donc, le premier onglet sera toujours là, et puis j'ai un répéteur qui crée x nombre d'onglets, et après le répéteur, j'ai un autre onglet qui sera toujours là. J'ai essayé d'envelopper le répéteur avec une vbox, mais cela crée juste une tabulation, et non un nombre de x basé sur les données dans le tableau. – Dana

+0

Je pense que @Dana espère voir un tas de conteneurs DynamicFieldEditor suivis d'un NotesEditor - ce qui me semble assez juste. – Amarghosh

+0

Voici un bon exemple: \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t Dana

2

Je crois que le problème est lorsque le dataProvider l'a mis en valeur/a changé.

Ceci n'est pas indiqué dans le code ci-dessus, il est donc difficile de le savoir. Cependant, chaque fois que la valeur de ceci est modifiée, les enfants existants créés par le répéteur seront retiré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 fournisseur de données est défini lors de l'initialisation du répéteur, de sorte que les onglets apparaissent dans l'ordre:

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

Cependant, si la valeur de la Les modifications dataProvider (ou le dataProvider distribue un CollectionChangeEvent), puis les 3 enfants répéteurs seront supprimés et les 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é une méthode organizeViewStack au gestionnaire d'événements repeatEnd - bien que le code de la méthode n'apparaît pas. Cela ressemble à la meilleure façon de gérer cela - en remaniant l'ordre des enfants une fois qu'ils ont été configurés.