如何解决通过状态更改检测何时显示或隐藏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)。
解决方法
解决方法如下:
<!-- 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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。