单击事件处理程序

时间:2015-09-24 12:20:33

标签: gwt event-handling

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

我想我应该使用计划或计时器,但我不确定

下面是代码:

public void onSendButtonClicked() {

        disableButtons();

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

3 个答案:

答案 0 :(得分:1)

你可以 - 正如阿卜杜拉所说 - 用

禁用/启用GWT中的每个小部件

widget.setEnable(false)

widget.setEnable(true)

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

public void onSendButtonClicked() {

    myProgessBar.show();

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

    myProgressBar.hide();
}

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

如果您正在使用小部件库f.e。:GXT,您会发现可以使用ProgressBar。

希望有所帮助。

答案 1 :(得分:0)

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

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

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

}

答案 2 :(得分:0)

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

单击按钮时,我使按钮不可见,ajaxloader可见。 当动作完成后,我使ajaxloader不可见,按钮可见。

通过这种方式,用户可以获得一些正在发生的事情的视觉反馈(禁用按钮时没有得到的结果),而不是整个应用程序被阻止(作为模态),这是使用ajax的优点之一