#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
стилях.