Flex/flashbuilder 4 estados de gumbo a veces están en blanco
-
26-09-2019 - |
Pregunta
A continuación se muestra un ejemplo muy simple, al azar, si hago clic en el botón Paso 2, el estado cambiará pero el panel Paso 2 no estará allí.
Sospecho que los niños del estado no se están creando por alguna razón, por lo que establecí el elemento CreationPolicy a "inmediato", pero no hace ninguna diferencia
Esto es catastrófico para la aplicación porque el usuario se queda en el limbo y se ve obligado a actualizar
¿Alguna idea, por favor?
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationPolicy="all" currentState="step1">
<s:states>
<s:State name="step1"/>
<s:State name="step2"/>
</s:states>
<s:BorderContainer includeIn="step1" itemCreationPolicy="immediate">
<s:Panel title="Step 1"/>
</s:BorderContainer>
<s:BorderContainer includeIn="step2" itemCreationPolicy="immediate">
<s:Panel title="Step 2"/>
</s:BorderContainer>
<s:Button title="step1" click="{this.setCurrentState('step1',true)}"/>
<s:Button title="step2" click="{this.setCurrentState('step2',true)}"/>
</s:BorderContainer>
Solución
Lo acabo de probar con Flex SDK 4.1 y funciona sin cambiar la política de creación. Al hacer clic en "Paso 2", cambia con éxito el estado.
Por cierto: no necesitas los aparatos ortopédicos rizados en tu manejador de eventos haz clic en ...
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" currentState="step1">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:states>
<s:State name="step1"/>
<s:State name="step2"/>
</s:states>
<s:BorderContainer includeIn="step1">
<s:Panel title="Step 1"/>
</s:BorderContainer>
<s:BorderContainer includeIn="step2">
<s:Panel title="Step 2"/>
</s:BorderContainer>
<s:Button label="step1" click="setCurrentState('step1', true)"/>
<s:Button label="step2" click="setCurrentState('step2', true)"/>
</s:Application>
Otros consejos
Parece que usa la versión antigua / previa al lanzamiento de Flex 4 SDK. Puede ser una buena idea actualizar a 4.1.0 - Última versión estable.
PD: Escribir this.setCurrentState('step1',true)
no es la mejor idea. Sugiero usar currentState = 'step1'
- Es la forma oficial de cambio de estado.