1

当用户关闭窗口、刷新窗口或单击后退按钮时,我正在尝试运行一些 RPC 调用,仅针对一个页面。我发现了一篇关于处理的帖子,但解决方案效果不佳,缺少后退按钮处理程序(不起作用),并且始终适用于网络上的所有页面,如果您离开页面,我找不到删除处理程序的内容

    Window.addWindowClosingHandler(new Window.ClosingHandler() {

                @Override
                public void onWindowClosing(ClosingEvent event) {
                    event.setMessage("You sure?");
                }
            });

    Window.addCloseHandler(new CloseHandler<Window>() {

                @Override
                public void onClose(CloseEvent<Window> event) {

                    // Execute code when window closes!
                System.out.println("ble ! ");

                }
            });

框架:带有 mvp4g 的 GWT 2.4。
浏览器:FF 和 Chrome。

4

2 回答 2

1

因为我使用 mvp4g 框架,所以我在那里找到了一个解决方案,您需要使用 CyclePresenter 扩展您的演示者并覆盖 onLoad 和 onUnload 方法。这些方法在视图从 DOM 加载/卸载时触发,我测试并适用于所有情况,f5、后退按钮、关闭浏览器/选项卡、转到其他 Web 并调用其他事件。现在我不能在那里放一些代码。

于 2012-08-03T16:11:05.057 回答
0

您需要在离开页面时删除处理程序,然后在再次进入页面时重新添加它。上面的代码覆盖了“添加”部分,但缺少“删除”部分。您可以通过使用HandlerRegistration从方法返回的对象来做到这一点add*Handler。当您想删除注册的处理程序时,您只需调用该HandlerRegistration.removeHandler()方法:

HandlerRegistration windowClosingHandler = Window.addWindowClosingHandler(new ClosingHandler() {
    @Override
    public void onWindowClosing(ClosingEvent event) {
        // Handle window closing
    }
});
// From now on the CloseHandler will be fired

// ...
// Somewhere else:
windowClosingHandler.removeHandler();
// From now on the CloseHandler won't be fired
于 2012-08-03T13:12:35.373 回答