2010-11-19 4 views
0

Unten ist ein sehr einfaches Beispiel, zufällig, wenn ich auf die step2 Schaltfläche klicke, wird sich der Status ändern, aber das Step 2 Panel wird nicht da sein.flex/flashbuilder 4 gumbo states sind manchmal leer

Ich vermute, dass die Kinder des Staates sind aus irgendeinem Grund nicht erstellt bekommen, weshalb ich die itemCreationPolicy auf „sofort“, aber es macht keinen Unterschied,

Dies ist für die Anwendung ist katastrophal, weil der Benutzer ist links in der Schwebe und gezwungen, zu aktualisieren

Irgendwelche Ideen, bitte?

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

Antwort

1

Ich habe es gerade mit Flex SDK 4.1 getestet und es funktioniert, ohne die Erstellungsrichtlinie zu ändern. Durch Klicken auf "Schritt 2" wird der Status erfolgreich geändert.

BTW: Sie brauchen nicht die geschweiften Klammern in Sie Ereignishandler klicken ...

<?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> 
+0

Das Problem ist zufällig, es wird 20 mal arbeiten und dann wird plötzlich das Problem auftauchen. Wenn ich die App für eine Stunde verlasse und dann wieder zurückkomme scheint es häufiger zu passieren (GC?) Danke für die geschweiften Klammern Tipp –

1

Es scheint, dass Sie alt/Pre-Release-Version von Flex 4 SDK verwenden. Es könnte eine gute Idee sein, auf 4.1.0 zu aktualisieren - letzte stabile Version.

P.S: Schreiben this.setCurrentState('step1',true) ist nicht die beste Idee. Ich schlage vor, currentState = 'step1' zu benutzen - es ist die offizielle Art des Zustandswechsels.

+0

Ich benutze Flex 4.1.0 Was ist das Problem mit der Verwendung von SetCurrentState, vorschlagen die API-Dokumente es? –

+0

Die [Dokumentation] (http://livedocs.adobe.com/flex/3/html/help.html?content=using_states_3.htmdocumentation) sagt: "Sie können den Ansichtszustand einer Komponente auch ändern, indem Sie die Methode setCurrentState() aufrufen der UIComponent-Klasse. Verwenden Sie diese Methode, wenn Sie einen Übergang, den Sie zwischen zwei Ansichtszuständen definiert haben, nicht anwenden möchten. " In den meisten Fällen können Sie einfach 'currentState = 'foo' verwenden. –

Verwandte Themen