Pergunta

Eu tenho um requisito em meu projeto atual (um aplicativo Flex, que será executado em Flash player) para exibir um subconjunto arbitrário de componentes em um formulário, escondendo todos os outros componentes com base em determinados aspectos do estado do aplicativo. Há cerca de uma dúzia de diferentes caixas de texto e queda baixos, mas alguns tornam-se irrelevantes com base em dados do usuário inseridos anteriormente e não deseja exibir os quando chegarmos a esta forma particular. Toda vez que este formulário é exibido eu poderia precisar mostrar qualquer uma das muitas permutações desses componentes.

Eu estou tentando decidir qual a melhor maneira de abordar este problema. Devo criar uma tela (ou outro recipiente) com todos os controles necessários sobre ele e, em seguida, basta definir visível = false sobre os que eu não precisa? O problema torna-se então certificando-se o layout parece decente. Eu não quero que haja lacunas onde os controles ocultos teria sido.

A outra opção que eu tenho pensado sobre é apenas ter um mecanismo que poderia instanciar dinamicamente o etc. componente TextInput ou caixa de seleção e, em seguida, chamar container.addChild (controle), a fim de construir os componentes e não precisa se preocupar com o gap questão.

Este parece ser um problema que tem uma solução idiomática em flex, mas eu não sei o que é. Nenhuma dessas idéias parecem tão grande que eu estou querendo saber se alguém tem uma idéia melhor.

Foi útil?

Solução

Eu não sei se esta é uma boa solução ou não, mas quando eu estava exatamente na mesma situação, eu fiz basicamente o seu primeiro método. Set visible = false e também definir includeInLayout = false para evitar essas "lacunas" que você estava falando. É uma solução muito simples, muito fácil e rápido para implementar ... talvez alguém sabe de algo embora mais idiomática.

Outras dicas

A melhor maneira prática de fazer isso é usar estados. Por exemplo:

<mx:states>
    <mx:State name="State1">
        <mx:AddChild position="lastChild">
            <components.../>
        </mx:AddChild>
    </mx:State>
    <mx:State name="State2">
        <mx:AddChild position="lastChild">
            <mx:Canvas.../>
        </mx:AddChild>
        <mx:AddChild position="lastChild">
            <mx:VBox.../>
        </mx:AddChild>
    </mx:State>
</mx:states>

Em seguida, dentro de seu código, você chama this.currentState = "State1" para permitir que o primeiro estado etc. Usando estados, você pode mostrar seletivamente e ocultar componentes.

Eu recomendo googling para estados flexíveis tutoriais e tentar alguns para fora para ter uma idéia adequada de como os estados de trabalho.

Se os estados não vai fazer, confira artigos que explicam o ciclo de componentes vida.

Se você criar uma classe que estende um componente Flex como Canvas, você irá definir todos os componentes em uma função que createChildren substituição. Você vai revisitar o layout em outra função que override updateDisplayList

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top