2009-12-15 4 views
0

Je voulais utiliser l'événement currentStateChange dans mon application, mais quel que soit le code appelé dans cet événement n'a pas été exécuté, je pensais qu'il y avait peut-être un problème avec mon code. des exemples dans adobe live docs. Je pris cet exemple herecurrentStateChange et currentStateChanging ne se déclenchent pas dans Flex

<mx:states> 
    <mx:State name="One"> 
     <mx:SetProperty target="{p1}" name="x" value="110"/> 
     <mx:SetProperty target="{p1}" name="y" value="0"/> 
     <mx:SetProperty target="{p1}" name="width" value="200"/> 
     <mx:SetProperty target="{p1}" name="height" value="210"/> 
     <mx:SetProperty target="{p2}" name="x" value="0"/> 
     <mx:SetProperty target="{p2}" name="y" value="0"/> 
     <mx:SetProperty target="{p2}" name="width" value="100"/> 
     <mx:SetProperty target="{p2}" name="height" value="100"/> 
     <mx:SetProperty target="{p3}" name="x" value="0"/> 
     <mx:SetProperty target="{p3}" name="y" value="110"/> 
     <mx:SetProperty target="{p3}" name="width" value="100"/> 
     <mx:SetProperty target="{p3}" name="height" value="100"/> 
    </mx:State> 
    <mx:State name="Two"> 
     <mx:SetProperty target="{p2}" name="x" value="110"/> 
     <mx:SetProperty target="{p2}" name="y" value="0"/> 
     <mx:SetProperty target="{p2}" name="width" value="200"/> 
     <mx:SetProperty target="{p2}" name="height" value="210"/> 
     <mx:SetProperty target="{p3}" name="x" value="0"/> 
     <mx:SetProperty target="{p3}" name="y" value="110"/> 
     <mx:SetProperty target="{p3}" name="width" value="100"/> 
     <mx:SetProperty target="{p3}" name="height" value="100"/> 
    </mx:State> 
</mx:states> 

<!-- Define Transition array with one Transition object.--> 
<mx:transitions> 
    <!-- A transition for changing from any state to any state. --> 
    <mx:Transition id="myTransition" fromState="*" toState="*"> 
     <!-- Define a Parallel effect as the top-level effect.--> 
     <mx:Parallel id="t1" targets="{[p1,p2,p3]}"> 
      <!-- Define a Move and Resize effect.--> 
      <mx:Move duration="400"/> 
      <mx:Resize duration="400"/> 
     </mx:Parallel> 
    </mx:Transition> 
</mx:transitions> 

<!-- Define the Canvas container holding the three Panel containers.--> 
<mx:Canvas id="pm" width="100%" height="100%" > 
    <mx:Panel id="p1" title="One" 
      x="0" y="0" width="100" height="100" 
      click="currentState='One'" currentStateChange="Alert.show('change')" currentStateChanging="Alert.show('changing')" > 
     <mx:Label fontSize="24" text="One"/> 
    </mx:Panel> 

    <mx:Panel id="p2" title="Two" 
      x="0" y="110" width="100" height="100" 
      click="currentState='Two'" > 
     <mx:Label fontSize="24" text="Two"/> 
    </mx:Panel> 

    <mx:Panel id="p3" title="Three" 
      x="110" y="0" width="200" height="210" 
      click="currentState=''" > 
     <mx:Label fontSize="24" text="Three"/> 
    </mx:Panel> 
</mx:Canvas> 

Et tout ce que je faisais est de placer une alerte dans les deux événements currentStateChange et currentStateChanging du panneau One et je n'ai pas les alertes en cliquant sur le panneau. J'ai également essayé de remplacer le code en ligne par un appel à une fonction qui rend l'alerte aussi rien ne s'est passé.

Qu'est-ce qui ne va pas avec ce que j'essaie de faire ici?

Merci

Répondre

1

Vous écoutez des changements d'état de p1, mais vous ne jamais changer l'état de ce panneau: p1.currentState reste le même. Les États ne sont pas automatiquement hérités ou quelque chose comme ça. Si vous souhaitez voir l'état changer, ajoutez l'écouteur sur le conteneur dont vous définissez l'état. Dans l'exemple, vous liez à la balise Application.

+0

Il semble que j'ai mal compris la partie de currentState car je pensais que click = "currentState = 'One'" change l'état actuel de p1 de l'état de base à l'état "One" et non l'état du conteneur. Merci l'événement fonctionne maintenant quand je l'ai déplacé à la balise d'application. – Yasmine

Questions connexes