Настройка: приложение My Flex состоит из нескольких «субприложений». По сути, основная область приложения - это ApplicationControlBar с кнопками для каждого из подчиненных приложений. Остальная часть области представляет собой холст, на котором отображаются субприложения. Одновременно отображается только одно вспомогательное приложение. При переключении между субприложениями мы выполняем canvas.removeAllChildren (), затем canvas.addChild (subAppSwitchedTo). По сути, это ручная реализация ViewStack (плюсы и минусы которой не обсуждаются, поэтому воздержитесь от комментариев по этому поводу).
Проблема: в одном из моих субприложений (скажем, субприложение «А») у меня есть функция поиска, где результаты отображаются в всплывающем окне TitleWindow. Рабочий процесс похож на ввод критериев поиска, нажатие кнопки поиска, TitleWindow выскакивает с результатами (множественный выбор данных), выбирает желаемый результат (ы), щелкает OK, всплывающее окно исчезает (PopUpManager.removePopUp) и продолжает работу. Все работает нормально. Проблема в том, что если я переключаюсь на другое вспомогательное приложение (скажем, "B" - где A получает removeAllChildren () 'd, а B добавляется), а затем переключаюсь на назад на A и повторите поиск, когда откроется окно результатов TitleWindow, там будут ДВА, наложенных друг на друга. Если я продолжу уходить и возвращаться к A, каждый раз, когда я выполняю поиск, в «стопке» всплывающих окон будет появляться дополнительное всплывающее окно (по одному на каждый раз, когда A получает addChild () 'd).
Кто-нибудь еще испытал это? Я не уверен, что с этим делать, и это вызывает серьезную ошибку юзабилити в моем приложении. Это кому-нибудь звонит в колокола? Как будто мне как-то нужно очистить PopUpManager или что-то в этом роде (хотя я правильно вызываю removePopUp (), чтобы удалить TitleWindow). Пожалуйста помоги!
РЕДАКТИРОВАТЬ
Flex SDK = 4.5.1
// Subapp "A"
if (!certificateSearchTitleWindow)
{
certificateSearchTitleWindow = new CertificateSearchTitleWindow;
certificateSearchTitleWindow.addEventListener("searchAccept", searchOKPopupHandler);
certificateSearchTitleWindow.addEventListener("searchCancel", searchClosePopupHandler);
}
PopUpManager.addPopUp(certificateSearchTitleWindow, this, true);