Cairngorm xxxcommand는 여러 번 실행됩니다
-
20-09-2019 - |
문제
나는 문제를 해결했다. 나는 Flex를 사용하여 GIS 프로그램을하고있다.
내 응용 프로그램에지도가 있습니다.지도에서 하나의 아이콘을 클릭하면 Windowa가 팝업됩니다. Windowa 내부의 링크를 클릭하면 Windowb가 팝업되지만 WindowB를 닫고 Windowa 내부의 링크를 클릭하면 문제가 발생합니다. 시간, 두 개의 창 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);
...
}
누구든지 나에게 손을 줄 수 있습니까?
감사합니다!
최고, shuo
해결책
WindowBControl은 FrontController에서 상속됩니까? 그렇다면, 당신은 아마도 우연히 그것을 두 번 이상 인스턴스화하고있을 것입니다. 이것:
<control:WindowBControl id='control1'>
이 프론트 컨트롤러의 인스턴스를 만들 것입니다. 이 코드 라인을 Windowa에 넣으므로 Windowa의 새 인스턴스를 만들 때 마다이 컨트롤러의 새 인스턴스를 만들 것입니다. 그러면 이벤트가 시작될 때마다 컨트롤러의 각 인스턴스마다 명령이 한 번 호출됩니다.
당신은 당신이 긍정적 인 곳에서만 인스턴스를 인스턴스화해야합니다. 그들은 단 한 번만 인스턴스화 할 것입니다. 메인 응용 프로그램 MXML은이를위한 좋은 장소입니다.
다른 팁
첫 번째
// Shouldn't this be in a FrontController class?
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
Flex 3 Actionscript 참조에 따라 PopupManager.removePopup에 전화해야한다고 생각합니다.
최상위 창이 나타납니다. addPopup () 메소드를 사용하여 생성 된 팝업을 제거하기 위해 removePopup ()을 호출하는 것이 좋습니다. 클래스가 ifocusmanagercontainer를 구현하면 창에 고유 한 FocusManager가 있으므로 사용자가 탭 키를 사용하여 컨트롤 간 컨트롤에만 액세스됩니다.
다른 해결책을 찾습니다.
Windowa의 폐쇄 방법에서는 글을 씁니다
private function onClose():void
{
PopUpManager.removePopUp(this);
if(CairngormEventDispatcher.getInstance().hasEventListener(WindowBControl.EVENT_POPUPWindowB))
{
control1.removeCommand(WindowBControl.EVENT_POPUPWindowB);
}
}