单击事件处理程序

Click Event handler

当我单击按钮时,单击事件处理程序执行代码。如果错误(如果浏览器挂起)我点击按钮两次代码被执行 twice.i 不希望这种情况发生。 有什么建议可以阻止这种情况吗?

我想我应该使用日程表或计时器,但我不确定

下面是代码:

public void onSendButtonClicked() {

        disableButtons();

        eventBus.fireEvent(new SendEmcsDeclarationEvent(getDeclaration(), getMsgType()));
    }

我能想到的最好方法是 enable/disable 按钮本身,以确保处理程序中的代码在上一次调用完成之前不会再次调用。

public void onSendButtonClicked()
{
    try
    {
        disableButtons();

        eventBus.fireEvent(new SendEmcsDeclarationEvent(getDeclaration(), getMsgType()));
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally 
    {
        enableButtons();
    }

}

您可以 - 正如 Abdullah 提到的那样 - disable/enable GWT 中的每个小部件

widget.setEnable(false)

widget.setEnable(true).

如果你想锁定整个屏幕,创建一个模态弹出窗口,在按下按钮后显示它,并在代码完成后隐藏它。

public void onSendButtonClicked() {

    myProgessBar.show();

    eventBus.fireEvent(new SendEmcsDeclarationEvent(getDeclaration(), getMsgType()));

    myProgressBar.hide();
}

如果您使用异步调用,则必须在回调中隐藏进度条。在这种情况下,finally 命令可能会在执行回调之前执行。在您的情况下,创建 ShowProgressBarEvent 和 HideProgressbarEvent 可能是个好主意,这样您就可以在整个应用程序中使用进度条。

如果您使用的是小部件库 f.e.: GXT,您会发现一个可以使用的 ProgressBar。

希望对您有所帮助。

当我创建一个按钮时,我总是同时添加一个动画 gif (ajaxloader)。

单击按钮时,我使按钮不可见,ajax加载程序可见。 操作完成后,我让 ajaxloader 不可见,按钮可见。

通过这种方式,用户可以获得一些视觉反馈,表明正在发生某些事情(禁用按钮时你不会得到什么),而不是整个应用程序都被阻止(就像模态一样),这是加分之一使用 ajax.