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

这有效:

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

根据提供的信息,我猜 a.) 您认为正在触发的事件不会为 Window 组件触发(即使它们看起来应该触发)或 b.) 事件正在触发但顺序与您不同预计。

例如,当窗口关闭并且 Window 对象从不触发时,可能BrowserEvent首先触发某个或其他事件。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 回答