Pregunta

Tengo un requisito en mi proyecto actual (una aplicación Flex que se ejecutará en Flash Player) para mostrar un subconjunto arbitrario de los componentes en un formulario mientras oculto todos los demás componentes en función de ciertos aspectos del estado de la aplicación. Hay alrededor de una docena de cuadros de texto y menús desplegables diferentes, pero algunos se vuelven irrelevantes en función de los datos de usuario ingresados ??previamente y no queremos mostrarlos cuando lleguemos a este formulario en particular. Cada vez que se muestra este formulario, podría necesitar mostrar cualquiera de las muchas permutaciones de estos componentes.

Estoy tratando de decidir cuál es la mejor manera de abordar este problema. ¿Debo crear un Canvas (u otro contenedor) con todos los controles necesarios y luego configurar visible = false en los que no necesito? El problema es asegurarse de que el diseño se vea decente. No quiero que haya huecos donde habrían estado los controles ocultos.

La otra opción que he pensado es simplemente tener un mecanismo que pueda instanciar dinámicamente el componente TextInput o CheckBox, etc. y luego llamar a container.addChild (control) para construir los componentes y no tener que preocuparse por el problema de brecha.

Esto parece un problema que tiene una solución idiomática en flex, pero no sé cuál es. Ninguna de estas ideas parece genial, así que me pregunto si alguien más tiene una idea mejor.

¿Fue útil?

Solución

No sé si esta es una buena solución o no, pero cuando estaba exactamente en la misma situación, básicamente hice tu primer método. Establezca visible = false y también establezca includeInLayout = false para evitar esas "brechas". estabas hablando Es una solución muy simple, muy fácil y rápida de implementar ... quizás alguien más sepa algo más idiomático.

Otros consejos

La mejor forma de hacerlo es usar estados. Por ejemplo:

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

Luego, dentro de su código, llama a this.currentState = " State1 " para habilitar el primer estado, etc. Usando estados, puede mostrar y ocultar componentes de forma selectiva.

Recomiendo buscar en Google tutoriales de estados flexibles y probar algunos para tener una idea adecuada de cómo funcionan los estados.

Si los estados no funcionan, consulte los artículos que explican el ciclo de vida de los componentes.

Si crea una clase que extiende un componente flexible como Canvas, definirá todos los componentes en una función que anule createChildren. Revisará el diseño en otra función que anule updateDisplayList

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top