У меня есть компонент 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>
Атрибуты whenShown и whenHidden не существуют. Это всего лишь желание.
ПРИМЕЧАНИЕ: есть show и hide атрибутов, но они имеют дело со свойством visible (которое остается равным true независимо от того, состояние меняется).