非常简单,但我被卡住了。
问题我希望在我的组件的可见性发生变化时调用一个函数,以便我可以进行一些清理。
我已尝试使用FlexEvents FlexEvent.HIDE
和FlexEvent.SHOW
并指定要在我的mxml标头中调用的函数
show="onShow(event)"
private function onShow(event:FlexEvent):void
{
trace("********** onShow***********");
}
那不起作用。然后我尝试添加各种eventListeners,但这不起作用,我是否正在侦听错误的事件?
addEventListener(FlexEvent.SHOW, onShow, false, 0, true);
addEventListener(FlexEvent.STATE_CHANGE_COMPLETE, onHide, false, 0, true);
最后我尝试覆盖visible
的setter,但是却犯了错误
override public function set visible(value:Boolean):void
{
super.visible = value;
visible = value;
}
答案 0 :(得分:1)
使用FlexEvent.HIDE
和FlexEvent.SHOW
时你是对的,但我不知道你为什么没有得到你想要的东西。举一个简单的例子,一个按钮隐藏第二个按钮,当最后一个被隐藏时,它会禁用第一个按钮。第三个按钮显示第二个按钮,当它可见时启用第一个按钮:
<?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="955" minHeight="600" creationComplete="init(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function button_02_hideHandler(event:FlexEvent):void
{
button_01.enabled = false;
}
protected function button_01_clickHandler(event:MouseEvent):void
{
button_02.visible = false;
}
protected function button_03_clickHandler(event:MouseEvent):void
{
button_02.visible = true;
}
protected function init(event:FlexEvent):void
{
button_02.addEventListener(FlexEvent.SHOW, function(e:FlexEvent){
button_01.enabled = true;
})
}
]]>
</fx:Script>
<s:Button id="button_01" x="68" y="93" label="Button 01" click="button_01_clickHandler(event)"/>
<s:Button id="button_02" x="170" y="93" label="Button 02" hide="button_02_hideHandler(event)"/>
<s:Button id="button_03" x="276" y="93" label="Button 03" click="button_03_clickHandler(event)"/>
</s:Application>