处理窗口关闭事件

时间:2012-11-05 13:14:28

标签: gwt gxt

点击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函数似乎没有执行,因为我看不到我放在那里的日志。

如何正确处理该事件?

3 个答案:

答案 0 :(得分:2)

怎么样

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

我通常将此onModuleLoad()放在我的EntryPoint课程中。

干杯,

答案 1 :(得分:0)

基于所提供的信息,我猜想,a。)您认为正在触发的事件不会触发Window组件(即使看起来应该如此)或b。)事件正在触发但是在不同的情况下订单超出预期。

例如,当窗口关闭且Window对象的BrowserEvent永远不会触发时,有可能首先触发WindowEvent或其他事件。根据GXT 2.x的API文档,WindowEvent将触发隐藏和停用,但它没有指定它在关闭时触发。 GXT 3.0.x API doc在这一点上不太清楚,但我会假设相同的行为。不幸的是,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

答案 2 :(得分:0)

这有效:

    window.addListener(Events.Hide, new Listener<ComponentEvent>() {
        @Override
        public void handleEvent(ComponentEvent be) {
          // Do stuff
        }
    });