2010-10-20 74 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>