/ / Flex ViewStack com um repetidor - repetidor é colocado na parte inferior - flex, repetidor, viewstack

Flex ViewStack Com Repetidor - Repetidor É Colocado Na Parte Inferior - flex, repetidor, viewstack

Eu tenho um problema ao criar um ViewStack, comum repetidor junto com outros componentes (ou seja, vBox) dentro do ViewStack. Os repetidores são colocados na parte inferior da exibição. Apesar do repetidor estar listado antes de outros componentes, ele é colocado na parte inferior.

Existe uma solução alternativa onde posso obter o repetidor desenhado antes dos outros componentes?

Eu pesquisei isso e alguém fez a mesma pergunta em outro site, mas ninguém respondeu. Estou colando código de amostra do post deles. O repetidor é desenhado por último.

obrigado

Aqui está um exemplo:

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

Respostas:

2 para resposta № 1

Eu acredito que o problema é quando o dataProvider está tendo o valor definido / alterado.

Isso não é mostrado no código acima, então é difícilsaber. No entanto, sempre que o valor disso for alterado, os filhos existentes criados pelo repetidor serão removidos do pai e novos serão adicionados.

Se os filhos do ViewStack já tiverem sido criados, os filhos do repetidor serão colocados depois dos filhos existentes.

Por exemplo:

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

Nesse caso, o dataProvider é definido durante a inicialização do repetidor, portanto as guias aparecem em ordem:

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

No entanto, se o valor do dataProvider for alterado(ou o dataProvider despacha um CollectionChangeEvent), então os 3 filhos repetidores seriam removidos e novos filhos adicionados. Isso deixaria a ordem de tabulação:

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

Eu noto que você ligou um organizeViewStack método para o repeatEnd manipulador de eventos - embora o código para o método não seja mostrado.

Esta parece ser a melhor maneira de administrar isso - reorganizando a ordem dos filhos quando eles estiverem prontos.


0 para resposta № 2

Eu estou supondo um pouco, mas

Todos os filhos de um ViewStack devem ser um contêiner. O Repetidor não é um contêiner. Portanto, o posicionamento como filhos do ViewStack é irrelevante, porque, para todos os efeitos, ele é ignorado.

No entanto, quando o repetidor é executado, ele cria um grupo de contêineres e os adiciona ao pai (AKA ViewStack); Assim, dando-lhes uma ordem Z diferente do que você pode esperar do código.

Você está tentando criar muitos filhos diferentes do ViewStack? Ou você está esperando que os "DynamicFieldEditors" sejam empilhados de alguma forma?