2010-10-20 61 views

回答

9

如果你在說視圖狀態的答案是肯定的,你可以像這樣監聽enterState事件(對於簡單的例子來說很抱歉,它是我正在工作的一個項目的一部分,我刪除了任何相關的部分的代碼):

<?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" 
      minWidth="800" minHeight="600" 
      currentState="loading"> 

<fx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 

     private function onEnterLoadingState():void{ 
      Alert.show("Enter the loading state.", "Application"); 
     } 

     private function onEnterLoginState():void{ 
      Alert.show("Enter the login state.", "Application"); 
     } 

     private function onEnterAddState():void{ 
      Alert.show("Enter the addUser state.", "Application"); 
     } 

     private function changeState(state:String):void{ 
      currentState = state; 
     } 
    ]]> 
</fx:Script> 

<s:states> 
    <s:State name="loading" enterState="onEnterLoadingState()"/> 
    <s:State name="login" enterState="onEnterLoginState()"/> 
    <s:State name="addUser" enterState="onEnterAddState()"/> 
</s:states> 

<s:Panel id="loadView" includeIn="loading" title="Loading"> 
    <s:Button label="Go to login" click="changeState('login')"/> 
</s:Panel> 
<s:Panel id="loginView" includeIn="login" title="Login"> 
    <s:Button label="Go to addUser" click="changeState('addUser')"/> 
</s:Panel> 
<s:Panel id="addView" includeIn="addUser" title="AddUser"> 
    <s:Button label="Return to loading" click="changeState('loading')"/> 
</s:Panel> 
</s:Application> 

而且有一個exitState事件,以防您需要它。我希望這可以幫助你。

15

我知道這個問題是舊的,但通過google搜索狀態更改事件我還是到這裏所以人們想知道:

有是由組件派出StateChangeEvent.CURRENT_STATE_CHANGE活動,讓您的應用程序還可以聽聽那個。

在監聽功能,您可以再存取權限的StateChangeEvent.oldStateStateChangeEvent.newState性能。

0

有多種狀態的事件,你可以監聽任何UIComponent類:

  • FlexEvent.STATE_CHANGE_COMPLETE
  • FlexEvent.STATE_CHANGE_INTERRUPTED
  • StateChangeEvent.CURRENT_STATE_CHANGING
  • StateChangeEvent.CURRENT_STATE_CHANGE
  • FlexEvent。 ENTER_STATE
  • FlexEvent.EXIT_STATE

MXML:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 

         enterState="windowedapplication1_enterStateHandler(event)" 
         exitState="windowedapplication1_exitStateHandler(event)" 
         currentStateChange="windowedapplication1_currentStateChangeHandler(event)" 
         currentStateChanging="windowedapplication1_currentStateChangingHandler(event)" 
         stateChangeInterrupted="windowedapplication1_stateChangeInterruptedHandler(event)" 
         stateChangeComplete="windowedapplication1_stateChangeCompleteHandler(event)"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 


      protected function windowedapplication1_stateChangeCompleteHandler(event:FlexEvent):void 
      { 

      } 

      protected function windowedapplication1_stateChangeInterruptedHandler(event:FlexEvent):void 
      { 

      } 

      protected function windowedapplication1_currentStateChangeHandler(event:StateChangeEvent):void 
      { 
       var oldState:String = event.oldState; 
       var newState:String = event.newState; 
      } 

      protected function windowedapplication1_currentStateChangingHandler(event:StateChangeEvent):void 
      { 
       var oldState:String = event.oldState; 
       var newState:String = event.newState; 
      } 

      protected function windowedapplication1_enterStateHandler(event:FlexEvent):void 
      { 

      } 

      protected function windowedapplication1_exitStateHandler(event:FlexEvent):void 
      { 

      } 
     ]]> 
    </fx:Script> 
</s:WindowedApplication>