Получение событий FlexEvent.SHOW у внуков ViewStack - PullRequest
1 голос
/ 28 февраля 2012

Прямые дочерние элементы ViewStack получают FlexEvent.SHOW после отображения соответствующего дочернего представления.К сожалению, информация о событии теряется на более глубоких дочерних уровнях, поэтому внуки ViewStack не получают событие SHOW.

Какой подход целесообразно использовать для получения событий SHOW, полученныхпрямые дети ViewStack от внука или внука?

Использование parent.parent.[...].addEventListener(FlexEvent.SHOW, [...]), конечно, было бы возможно, но довольно уродливо, поскольку оно сломается, как только числоизменяются уровни иерархии между двумя компонентами.

Существуют ли другие события, которые лучше подходят?

Подоплекой моего вопроса является то, что я хотел бы перезагрузить контент внуков, когда он снова станет видимым.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Вы можете прослушать событие ADDED_TO_STAGE в представлении внука и выяснить, входите ли вы в состав представления. Если да, то просто слушайте события show / hide дочернего стека представлений.

... addedToStage="setMeUpForViewStack()" ...

Что такое:

private var vsView:UIComponent = null;

private function setMeUpForViewStack():void
{
  if (vsView) {
    vsView.removeEventListener("show", vsViewShowHideHandler);
    vsView.removeEventListener("hide", vsViewShowHideHandler);
    vsView = null;
  }

  var obj:DisplayObject = this;
  while (obj.parent != obj) {
    if (obj.parent is ViewStack) {
      vsView = obj;
      break;
    }

    obj = obj.parent;
  }

  if (vsView) {
    vsView.addEventListener("show", vsViewShowHideHandler, false, 0, true);
    vsView.addEventListener("hide", vsViewShowHideHandler, false, 0, true);
  }
}

А в вашем vsViewShowHideHandler вы бы перезагрузили контент (если видимость видна).

В основном это освобождает вас от беспокойства об уровне вложенности. Однако он не работает с несколькими вложенными стеками представлений.

В обработчике событий REMOVED_FROM_STAGE вы забудете vsView.

0 голосов
/ 28 февраля 2012

Хотя закапывание в стек просмотра будет работать, я согласен, что это уродливо и потенциально может привести к головным болям, как только что-то изменится.

Другой подход может заключаться в реализации глобального диспетчера событий.

Имея статический диспетчер событий в классе, внуки могут подписываться на события статического диспетчера из любого места в приложении.

Когда родитель слышит FlexEvent.Show, обработчик может отправить пользовательское событие, используяглобальный диспетчер?

...