在组件可见性更改时调用函数

时间:2014-12-13 20:57:57

标签: actionscript-3 flex flex4

非常简单,但我被卡住了。

问题我希望在我的组件的可见性发生变化时调用一个函数,以便我可以进行一些清理。

我已尝试使用FlexEvents FlexEvent.HIDEFlexEvent.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;
        }

1 个答案:

答案 0 :(得分:1)

使用FlexEvent.HIDEFlexEvent.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>