2011-06-15 68 views
0

我有一個Spark組件,當可見時(通過Timer)運行一些動畫。當它再次顯示通過狀態變化顯示或隱藏Spark組件時檢測

  • 暫停定時器的是隱藏在何時
  • 簡歷定時器:

    組件應該。

<!-- RandomButton.mxml--> 
<?xml version="1.0"?> 
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      creationComplete="start()"> 
    <fx:Script><![CDATA[ 
     public var ticker:Timer = new Timer(1000, 0) 

     private function start():void { 
      ticker.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void { 
       label = '' + Math.random() 
      }) 
     } 
    ]]></fx:Script> 
</s:Button> 

這裏是如何的目標可以用enterState + exitState來實現:

<!-- Main.mxml --> 
<?xml version="1.0" ?> 
<s:Application 
     xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns="*"> 
    <s:layout> 
     <s:VerticalLayout/> 
    </s:layout> 

    <s:states> 
     <s:State name="STATE_1" 
       enterState="b.ticker.start()" 
       exitState="b.ticker.stop()"/> 
     <s:State name="STATE_2"/> 
    </s:states> 

    <s:Button label="STATE_1" click="currentState='STATE_1'"/> 
    <s:Button label="STATE_2" click="currentState='STATE_2'"/> 

    <RandomButton id="b" includeIn="STATE_1"/> 
    <s:Label text="Debug: {b.label}"/> 

</s:Application> 

當點擊STATE_2按鈕,停止計時器 - 你可以看到 '調試' 標籤也停止。

你可以看到RandomButton需要一些外部的「幫助」來處理它的內部問題。這意味着將enterState/exitState複製到RandomButton將要使用的任何地方。這只是傷心。

問題

我想RandomButton本身保持其狀態。就像這樣:

<!-- Main.mxml --> 
... 
    <s:states> 
     <s:State name="STATE_1"/><!-- no need to poke inside the RandomButton --> 
     <s:State name="STATE_2"/> 
    </s:states> 
... 

<!-- RandomButton.mxml --> 
<?xml version="1.0"?> 
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      creationComplete="start()" 

      whenShown="ticker.start()" 
      whenHidden="ticker.stop()" > 
    ... 
</s:Button> 

屬性whenShownwhenHidden不存在。這些只是一個願望。

注:有顯示隱藏屬性,但他們處理可見屬性(它仍設置爲真正無論狀態的變化)。

回答

1

這裏是解決方案:

<!-- RandomButton.mxml --> 
<?xml version="1.0"?> 
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 

      addedToStage="ticker.start()" 
      removedFromStage="ticker.stop()" 
    ... 
</s:Button>