2009-03-27 2 views
1

GXT에서 MessageBox 메서드는 비동기식입니다. 즉, 메시지 상자가 표시되는 동안 응용 프로그램이 "잠김"하지 않는 메서드입니다.GXT KeyListener.componentKeyDown()이 MessageBox.alert()를 즉시 닫습니다.

나는 KeyListener을 사용하여 양식에서 Enter 키 누르기를 처리하여 (사용성을 높이려면 (즉, 입력 키를 사용하여 양식을 제출할 수있게 함) 응용 프로그램이 사용자 자격 증명을 처리하는 동안 양식 필드를 비활성화합니다. 올바르지 않은 경우 MessageBox.alert()을 표시 한 다음 양식 필드를 다시 사용하도록 설정합니다. 그러나 alert()이 즉시 반환되기 때문에 사용자가 경고를 닫지 않고 데이터를 입력 할 수 있도록 즉시 양식 필드를 다시 사용할 수 있습니다.

해결 방법은 alert()에 콜백을 사용하는 것입니다. 그러나 입력 키 누르기는 양식을 제출하게 할뿐만 아니라 (양식과 메시지 상자가 모두 Enter 키를 처리하는 것처럼) 즉시 경고를 해제합니다. 사용자가 다시 입력하거나 "확인"버튼을 누를 때까지 경고 상자를 열어 두는 방법은 무엇입니까?

답변

2

의 핵심은 GWT에서 제공 DeferredCommand입니다 :

이 클래스를 사용하면 addCommand(Command) 또는 addCommand(IncrementalCommand) 방법을 사용하여, 결국 현재 보류 이벤트 핸들러가 완료 코드를 실행할 수 있습니다. 이것은 현재 스택 컨텍스트 외부에서 코드를 실행해야 할 때 유용합니다.

if(!validate()) 
{ 
    DeferredCommand.addCommand(new Command() { 
     public void execute() { 
      MessageBox.alert("Error", "You must enter a username and password.", alertListener); 
      return; 
     } 
    }); 
}