문제

나는 문제를 해결했다. 나는 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);
     }

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top