Cairngorm XXXCommand быть выполнен несколько раз
Я столкнулся с проблемой. Я делаю ГИС-программу с использованием flex.
В моем Приложении есть карта, когда я нажимаю один значок на карте, появляется окно А, когда я щелкаю ссылку внутри окна А, появляется окно В, но здесь возникает моя проблема, когда я закрываю окно В и щелкаю ссылку внутри окна А, другое время, два окна B всплывает...
В моем окне А у меня есть
...
var windowBEvt:WindowBEvent = new WindowBEvent();
CairngormEventDispatcher.getInstance().dispatchEvent(windowBEvt);
...
<control:WindowBControl id='control1'>
В WindowBControl у меня есть
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
В WindowBCommand у меня есть
public function execute(event:CairngormEvent):void
{
...
var windowB:WindowB = new WindowB();
PopUpManager.addPopUp(windowB);
...
}
Кто-нибудь может мне помочь?
Большое спасибо!
Лучшее, Шо
3 ответа
WindowBControl наследуется от FrontController? Если это так, вы, вероятно, создаете его несколько раз случайно. Это:
<control:WindowBControl id='control1'>
собирается создать экземпляр этого фронт-контроллера. Поскольку вы поместили эту строку кода в WindowA, вы будете создавать новый экземпляр этого контроллера каждый раз, когда создаете новый экземпляр WindowA. Это приведет к тому, что команды будут вызываться один раз для каждого экземпляра контроллера при каждом срабатывании вашего события.
Вы должны создавать экземпляры только передних контроллеров, если вы уверены, что они будут созданы только один раз. Основное приложение mxml - хорошее место для этого.
Первый
// Shouldn't this be in a FrontController class?
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
Я думаю, что вы должны как-то вызвать PopupManager.removePopup, потому что ссылка на ActionScript Flex 3 гласит:
Выскакивает окно верхнего уровня. Рекомендуется вызывать метод removePopUp() для удаления всплывающих окон, созданных с помощью метода addPopUp(). Если класс реализует IFocusManagerContainer, у окна будет свой собственный FocusManager, так что, если пользователь использует клавишу TAB для перемещения между элементами управления, будут доступны только элементы управления в окне.
Я нахожу другое решение.
В методе закрытия окна А я пишу
private function onClose():void
{
PopUpManager.removePopUp(this);
if(CairngormEventDispatcher.getInstance().hasEventListener(WindowBControl.EVENT_POPUPWindowB))
{
control1.removeCommand(WindowBControl.EVENT_POPUPWindowB);
}
}