2014-12-13 7 views
0

Довольно простая вещь, но я застрял.вызов функции при изменении видимости компонента

Вопрос: Я хочу вызвать функцию, когда видимость моего компонента изменяется, поэтому я могу немного очистить.

Я попытался с помощью 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 но бросил

ошибка позиционирования
 override public function set visible(value:Boolean):void 
     { 
      super.visible = value; 
      visible = value; 
     } 

ответ

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> 
+1

спасибо за проверку реальности. Это унаследованный проект, и я все еще чувствую, что происходит. Оказывается, что вместо видимости компонента, с которым я работал, он был включен, это был компонент, накладывающий его, поэтому видимость того, о чем я беспокоился, никогда не менялась. Потратил на это хороший час. Arrrgh .. –

Смежные вопросы