通过状态更改检测何时显示或隐藏Spark组件
|
我有一个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按钮后,计时器停止-您可以看到\'debug \'标签也停止了。
您可以看到,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不存在。这些只是一个愿望。
注意:有显示和隐藏属性,但是它们处理可见属性(无论状态如何变化,该属性均保持设置为true)。
没有找到相关结果
已邀请:
1 个回复
剑哎