2010-04-13 4 views
1

내 GWT 프로젝트에서 두 DialogBox가 정보를 서로 전달할 수 있도록 가져 오려고합니다. 그 중 하나에는 MapWidget이 있고 다른 DialogBox에서 버튼을 누르면 해당 DialogBox의 MapWidget에서 위치 정보가 수신됩니다. 아무도 두 개의 다른 DialogBoxes 표시 사이에 조정해야하는 방법에 대한 모든 조언을 가지고 있습니까? Composite에서 두 코드를 묶어야합니까? 또한 GWT에서 한 번에 두 개의 DialogBox를 다루는 예제가 있습니까? 예를 들어 두 상자 외부를 클릭하면 둘 다 해제되어야합니다. 한 번에 두 가지 방법을 모두 집중시키는 방법이 있는지 궁금 하네. 그래서 둘 중 하나를 사라지게하지 않고 둘 사이를 전환 할 수 있습니다.GWT에서 두 개의 대화 상자 연결

답변

1

대화 상자 사이 데이터 공유 내 의견, 중, 발표자보기를 관리하도록 (DialogBox ES를 응용 프로그램의 MVP structure의 일종을 구현하는 것이이 작업을 수행하기 위해 "올바른"방법으로

다른 것들)를 표시하고보기 위해 간단한 데이터를 전달하는 방법을 알고 있습니다 (발표자는 MapWidget 데이터를 처리 할 것이고 뷰는 DOM에 표시 할 것입니다). 당신이 언급 한 바와 같이,

  1. Composite 만들기 : 당신이 빠른/더 간단한 방법을 찾고 있다면

    그러나, 당신은 (실제로 애플리케이션 구조에 따라 선택) 옵션이 몇 가지있다 , 필요한 데이터를 앞뒤로 전달하는 방법을 알고 있습니다. Composite에서 데이터 객체를 관리하고이를 표시하는 방법을 두 DialogBox에게 알려줌으로써 실제로는 Composite 내의 MVP 아키텍처에 접근하고 있습니다.

  2. 서브 클래스 DialogBox은 버튼을 누를 때 이벤트를 발생시키는 HandlerManager ("이벤트 버스"로도 사용되기도 함)을 포함하는 클래스로 분류됩니다. 두 개의 DialogBox 사이에서 데이터를주고 받기 위해 설계된 이벤트를 만들 수 있습니다 (유형 매개 변수로 유형을 안전하게 만들 수도 있습니다). HandlerManager 사용에 대한 자세한 내용은 this StackOverflow question을 참조하십시오. 위에 링크 된 MVP 기사에는 good information on using an event bus도 있습니다.

Model-View-Presenter는 검증 가능한 코드, 더 나은 프로젝트 구조를 제공하는 응용 프로그램을 구성하기위한 검증 된 방법입니다. 이와 같은 결정을 내릴 때 도움이 될 수 있습니다. 아직 체크 아웃하지 않은 경우 체크 아웃하는 것이 좋습니다.

공유 자동 숨김 기능

GWT의 (DialogBox이 기반이되는) PopupPanel thusly 히 설명하는 방법 addAutoHidePartner(Element) 제공 : 숨길 것이다 자동 숨김 파트너 내에서 발생

마우스 이벤트를 자동 숨기기로 설정된 패널

그래서, 당신은 가까운 당신이 그들 모두 바깥 쪽을 클릭이 자동 숨어 DialogBox ES를 만들 수있는 다음 코드 (당신이 상자 중 하나에서 클릭 할 때 예를 들어, 그들은 닫지 마십시오) :

// Create the dialog boxes 
DialogBox dbox1 = new DialogBox(true, false); 
DialogBox dbox2 = new DialogBox(true, false); 
// Set some visual options 
dbox1.setPopupPosition(10, 10); 
dbox2.setPopupPosition(200, 10); 
dbox1.setAnimationEnabled(true); 
dbox2.setAnimationEnabled(false); 
// Set the dialog boxes' caption and content 
dbox1.setHTML("Dialog Box 1"); 
dbox2.setHTML("Dialog Box 2"); 
dbox1.setWidget(new HTML("This is the first dialog box.")); 
dbox2.setWidget(new HTML("This is the second dialog box.")); 
// Making dobx2 a partner of dbox1 means clicking 
// in dbox2 won't cause dbox1 to close 
dbox1.addAutoHidePartner(dbox2.getElement()); 
// Similarly, setting dbox1 as a partner of dbox2 means 
// clicking in dbox1 won't cause dbox2 to close 
dbox2.addAutoHidePartner(dbox1.getElement()); 
// Show the dialog boxes 
dbox1.show(); 
dbox2.show(); 

다른 닫지 않고 대화 상자 중 하나와 상호 작용할 수 있습니다. 편도 파트너쉽 만 원한다면 setAutoHidePartner으로의 적절한 호출을 생략하십시오.

+0

고맙습니다. 작동합니다! 유일한 문제는 두 개의 DialogBox에 대해 setGlassEnabled (true)를 사용할 수없는 것 같습니다. 오 잘. –

+0

듣기 좋다! 다른 'DialogBox'가 아직 보이지 않고 유리가 활성화되어 있는지 확인하기 위해'show()'를 오버로딩 할 수 있으므로 부모 'show()'를 호출하기 전에 프로그래밍 방식으로 유리의 활성 상태를 설정합니다. 이렇게하면 'DialogBox'중 하나 또는 둘 다 표시 될 때마다 유리를 활성화 할 수 있습니다. 물론 상자를 닫을 때 유리 상태를 확인해야합니다. –

관련 문제