1

GXT では、MessageBoxメソッドは非同期です。つまり、メッセージ ボックスが表示されている間、アプリケーションは「ロックアップ」しません。

を使用しKeyListenerてフォームでの Enter キーの押下を処理し (使いやすさを向上させるため、つまり、Enter キーでフォームを送信できるようにするため)、その後、アプリケーションがユーザーの資格情報を処理している間、フォーム フィールドを無効にします。それらが正しくない場合はMessageBox.alert()、フォーム フィールドを表示してから再度有効にします。ただし、alert()すぐに戻るため、フォーム フィールドはすぐに再び使用可能になり、ユーザーはアラートを閉じずにデータを入力できます。

解決策は、でコールバックを使用することalert()です。ただし、Enter キーを押すと、フォームが送信されるだけでなく、アラートがすぐに閉じられます (フォームとメッセージ ボックスの両方が Enter キーを処理しているかのように)。ユーザーが 2 回目に Enter キーを押すか、[OK] ボタンをクリックするまで、アラート ボックスを開いたままにしておくにはどうすればよいですか?

4

1 に答える 1

2

キーはGWTDeferredCommandによって提供されます。

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;
        }
    });
}
于 2009-03-27T22:27:06.797 に答える