0

aの閉じるボタンがクリックされたときにイベントを処理しようとしてWindowいます。

// View Code
@Override
public void attachWindowListener(WindowListener listener) {
    window.addWindowListener(listener);
}

// Presenter code
    view.attachWindowListener(new WindowListener(){
          public void windowHide(WindowEvent we) {
              GWT.log("Window Event - Processing fields");
              processFields();
          }         
    });

ただし、そこに配置したログが表示されないため、windowHide関数が実行されていないようです。

そのイベントを適切に処理する方法は?

4

3 に答える 3

2

どうですか

Window.addCloseHandler( 
    new CloseHandler<Window>() 
    {
        public void onClose( CloseEvent<Window> windowCloseEvent ) 
        {
            // Do your worst here
        }
    } );

私は通常これをクラスに入れonModuleLoad()ますEntryPoint

乾杯、

于 2012-11-05T13:20:56.513 に答える
0

提供された情報に基づいて、a。)発生していると思われるイベントがWindowコンポーネントに対して発生しない(必要と思われる場合でも)か、b。)イベントが発生しているが、順序が異なると推測します。予想。

たとえばBrowserEvent、ウィンドウが閉じられているときに、または他のイベントが最初に発生し、WindowオブジェクトがWindowEvent発生しない可能性があります。GXT 2.xのAPIドキュメントによると、WindowEventは非表示で起動して非アクティブ化しますが、閉じるときに起動するようには指定されていません。GXT 3.0.x APIドキュメントは、この点についてはあまり明確ではありませんが、同じ動作を想定しています。残念ながら、Senchaは、特定のコンポーネントに対してどのイベントがどのような順序で発生するかについての適切なドキュメントを提供していません。

そうは言っても、接続されているコンポーネントのすべてのイベントを出力するデバッグクラスを使用して、これと同様の問題を解決することができました。これにより、発生しているイベントとその実行順序が明らかになり、メソッドをアタッチできる最適なイベントが見つかる可能性がありますprocessFields()

デバッガークラスの良い例については、関連する投稿からのこの回答を参照してください:https ://stackoverflow.com/a/2891746/460638 。また、デバッガーをコンポーネントに接続する方法の例も含まれています。

Window用APIドキュメント、GXT 2.x: http ://dev.sencha.com/deploy/gxt-2.2.5/docs/api/com/extjs/gxt/ui/client/widget/Window.html

Window用APIドキュメント、GXT 3.0.x: http ://dev.sencha.com/deploy/gxt-3.0.0/javadoc/gxt/com/sencha/gxt/widget/core/client/Window.html

于 2012-11-05T17:54:32.863 に答える
0

これはうまくいきました:

    window.addListener(Events.Hide, new Listener<ComponentEvent>() {
        @Override
        public void handleEvent(ComponentEvent be) {
          // Do stuff
        }
    });
于 2012-11-06T12:30:49.150 に答える