Простой способ подсчитать количество окон через PopUpManager?

#apache-flex #actionscript-3 #count #popupwindow

#apache-flex #actionscript-3 #подсчитать #popupwindow

Вопрос:

Я использую PopUpManager для вывода множества окон событий.

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

Подумываю о переменной windowCount, которая увеличивается при добавлении окна и уменьшается при его удалении, но поскольку PopUpManager вызывается в разных классах, мне пришлось бы начать генерировать события повсюду. Я могу это сделать, но мне интересно, есть ли более простой метод?

Ответ №1:

SystemManager (а не PopUpManager, разберитесь сами …) предоставляет информацию о текущих открытых всплывающих окнах.

Если все ваши всплывающие окна являются model, то вас заинтересует ‘SystemManager.numModalWindows‘:

Количество модальных окон. Модальные окна не позволяют нажимать в других окнах, которые обычно активируют FocusManager в этом окне. PopUpManager изменяет это количество по мере создания и уничтожения модальных окон.

В противном случае попробуйте ‘SystemManager.popUpChildren‘:

Список самых верхних (всплывающих) окон, родительских для этого ISystemManager.

ISystemManager имеет различные типы дочерних элементов, таких как приложение, всплывающие окна, всплывающие подсказки и пользовательские курсоры. Вы можете получить доступ к самым верхним окнам через свойство popUpChildren.

Объект IChildList имеет методы, подобные getChildAt(), и свойства, подобные numChildren. Например, popUpChildren.numChildren указывает количество самых верхних окон, и вы можете получить к ним доступ как popUpChildren.getChildAt(i).

Комментарии:

1. вау, приятно знать! никогда бы не догадался .. и я был так взволнован своим новым классом popUpDistrictManager, который я создавал. Я думаю, что больше нет спроса

2. к сожалению, я создаю bordercontainers, а не windows с помощью всплывающего менеджера, и они, похоже, не считаются popUpChildren.. есть свойство numChildren, но оно ненадежно (не совсем уверен, что считается дочерним, но часто их больше, чем я могу учесть)

Ответ №2:

Я вижу несколько вариантов:

1) Сделайте все ваши окна модальными; чтобы приложение нельзя было использовать, пока окно не будет закрыто. Это аргумент для метода createPopup в PopUpManager. Предположительно, у вас нет всплывающих окон, создающих другие всплывающие окна.

2) Создайте свой собственный класс Manager, возможно, расширение класса PopUpManager, который отслеживает все открытые окна. Тогда у вас был бы единый источник всех всплывающих окон, и вы могли бы поддерживать их таким образом.

Комментарии:

1. Изначально они были модальными, но я ненавидел эффект задержки и размытия… расширение PopUpManager может быть самым простым способом.. Спасибо

2. вау, расширение или даже копирование отдельных элементов не для слабонервных

3. @Damon вы можете убрать размытость и задержку для модальных окон с помощью CSS. Смотрите следующие стили modalTransparency , modalTransparencyBlur , modalTransparencyColor и modalTransparencyDuration . Вы можете задать новые значения в global стилях.