FlexMouseEvent.MOUSE_DOWN_OUTSIDE работает только для всплывающих компонентов? - PullRequest
2 голосов
/ 18 июня 2011

У меня есть компонент, который расширяет UIComponent Flex, я хочу добавить его слушатель FlexMouseEvent.MOUSE_DOWN_OUTSIDE, но он не работает.это означает, что я не могу захватить событие.Но когда я использую PopUpManager для добавления этого компонента, а затем добавляю прослушиватель FlexMouseEvent.MOUSE_DOWN_OUTSIDE, он работает нормально.

FlexMouseEvent.MOUSE_DOWN_OUTSIDE работает только для всплывающих компонентов?

Спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 18 июня 2011

Это событие происходит только через всплывающие окна. Если вы хотите проверить событие мыши, вам нужно добавить обычную мышь вниз в родительский контейнер и проверить, является ли цель НЕ дочерней.

Еще один способ сделать это - перехватить событие на сцене и на компоненте ... Поскольку пузыри идут вверх, щелчок компонента сначала улавливается.

public var bCompClicked=false;

stage.addEventListener(MouseEvent.CLICK,onStageClick);
myComponent.addEventListener(MouseEvent.CLICK,onComponentClick);

private function onComponentClick(event:MouseEvent):void{
     bCompClicked = true;
}

private function onStageClick(event:MouseEvent):void{
     if(!bCompClicked){   //we didn't click the component, so we clicked outside it..
       clickedOutSide();
     }else{
        bCompClicked=false; //we did click the component, set to false for the next time.
     }
}

private function clickedOutSide():void{
    //do what you want when someone clicks outside...
}

Отказ от ответственности Я не проверял и не думал об этом очень усердно ... так что это может не сработать.

0 голосов
/ 31 марта 2015

Это продолжение ответа Джонатана с одним обработчиком и забота о дочерних компонентах, если таковые имеются.

stage.addEventListener(MouseEvent.CLICK,onStageClick, false, 0, true);

private function onStageClick(event:MouseEvent):void
{
  var object:Object = event.target;
  while (object && object != this && object.hasOwnProperty("parent")) {
    object = object.parent;
  }
  if (object != this) {
    // the click is not from this component or its children
  }
}
...