2011-02-28 3 views
0

여기 시나리오가 있습니다 ... "열기"버튼이있는 응용 프로그램이 있습니다. 열기 버튼을 클릭하면 TitleWindow가 PopUpManager를 통해 레코드를 선택할 수있는 대화 상자를 표시합니다. 이 창에서 레코드를 선택하면 "확인"을 클릭하거나 창을 닫아야하는 대화 상자를 취소 할 수 있습니다.팝업, 앱 또는 팝업 자체를 삭제해야하는 사용자는 누구입니까?

주 응용 프로그램에 레코드 번호를 반환해야하는 것을 알고 가장 좋은 방법은 무엇입니까? 지금은 주 응용 프로그램이 사용자 지정 TitleWindow를 여는 있습니다. TitleWindow에는 사용자가 "Ok"를 클릭하고 레코드가 선택 될 때 발생하는 이벤트가 있습니다. 이것이 메인 애플리케이션이 레코드 ID를 수신하는 방법입니다. 내가 궁금하면 나는 이런 식으로 뭔가 할 수 있다면 수 있습니다 :

private function RecordSelected():void 
{ 
    this.selectedRecord = someControl.selectedIndex; 

    this.dispatchEvent(new Event("RecordSelected")); 

    PopUpManager.removePopup(this); 
} 

이 TitleWindow의 인스턴스가 이벤트가 주 응용 프로그램에 의해 처리 된 후까지 활성 유지 것인가를, 또는 완전히 주 응용 프로그램 전에 제거 할 수 이벤트를 처리하므로 (null 참조 예외로 끝남)?

또는,과 같이 이벤트 핸들러에서 창을 닫습니다 낫다 : 이벤트에서 선택을 보내는이 할 수있는 최선의 방법 인 경우 나 또한 궁금하네요

private function titleWindow_RecordSelected(event:Event) 
{ 
    var openDialog:CustomTitleWindow = CustomTitleWindow(e.currentTarget); 

    this._selectedRecord = openDialog.selectedRecord; 

    PopUpManager.removePopup(openDialog); 
} 

. 모든 통찰력은 인정 될 것이다. 미리 감사드립니다.

답변

1

이 문제를 처리하는 가장 좋은 방법은 무엇입니까, 내가 주 응용 프로그램에 기록 수를 반환 할 필요가 알고?

최고는 항상 주관적이지만 일반적으로 창 구성 요소에서 창의 닫기를 처리합니다. 적절한 데이터 (이 경우 Record No)가있는 이벤트를 응용 프로그램에 다시 보냅니다. 거기에 90 %의 소리가 들립니다. 이벤트 이벤트를 전달하는 대신 recordID를 사용하여 사용자 정의 Event 클래스를 만듭니다. 그런 다음 팝업이 메모리에 남아 있는지 또는 레코드 ID를 사용해야하는지 여부는 중요하지 않습니다.

+0

더 나은 방법으로 처리 할 수 ​​있습니다. 호기심을 위해 닫는 것조차도 계속 실행하면 직렬 방식으로 실행됩니다 (그래서 이벤트는 창을 닫기 전에 완전히 처리되어야합니다). – Ocelot20

+0

저는 이벤트 리스너가 "직렬"방식으로 실행된다는 것을 확신합니다. 따라서 팝업을 만든 구성 요소의 이벤트 리스너는 PopUpManager 제거 클래스보다 먼저 실행됩니다. [항상 옳은 것은 아니기 때문에 빠른 샘플을 작성하여이를 확인할 수 있습니다.] – JeffryHouser

관련 문제