0

シンプルな「お待ちください」メカニズムを備えた GWT アプリケーションがあります。ボタンを押して RPC 呼び出しを送信すると、RPC が戻るまでユーザーの操作をブロックするモーダル ポップアップ ダイアログが画面に表示されます。このように、ユーザーがボタンを複数回クリックして複数の RPC を送信するのを防ぎます。これは、IFrame をロードするときを除いて、完全に機能します。この場合、iframe にインストールしたロードハンドラは呼び出されません。

/**
 * Test class
 */
public class Test implements EntryPoint {

    /**
     * This is the entry point method.
     */
    @Override
    public void onModuleLoad() {
        final PopupPanel popup = new PopupPanel(false, true);
        popup.add(new Label("Please wait"));
        popup.center();

        final Frame frame = new Frame("http://www.google.com");
        frame.addLoadHandler(new LoadHandler() {
            @Override
            public void onLoad(LoadEvent event) {
                Window.alert("Event received");
                popup.hide();
            }
        });

        RootPanel.get().add(frame);
    }
}

ただし、PopupPanel(false, false) を構築すると、LoadEvent がトリガーされます。注: これはコンパイル モードでのみ発生し、GWT 開発モードでは発生しません。

誰も手がかりを持っていますか?

前もって感謝します、

マイク

4

2 に答える 2

2

ポップアップは使用しないでください。modalポップアップにはあらゆる種類の問題があります。ガラスパネルを表示することをお勧めします ( setGlassEnabled)。

于 2012-09-17T08:14:45.193 に答える
0

モーダル ウィンドウは、モダリティを確保するためにさまざまなイベントを防止します。その場合は、回避策を見つける必要があります。

クリック時にボタンを無効にし、rpc の成功または失敗時に有効にすることをお勧めします。

それらをすべて一度に無効にする必要がある場合は、おそらく独自のイベントを実装し、イベント バスに登録して、必要に応じて処理する必要があります。

于 2012-09-17T13:53:58.547 に答える