【问题标题】:GWT event handling. Needs to block the event till form submit finishGWT 事件处理。需要阻止事件直到表单提交完成
【发布时间】:2013-11-07 10:16:05
【问题描述】:

我正在使用 GWT 开发一个向导。在向导的第一页中,我有一个表单组件来上传文件。在向导面板中,当我按下下一个按钮时,我有下一个按钮,如果验证通过,验证方法将被触发,然后我调用 form.submit();但在 form.submit() 处理程序启动功能之前,验证方法会完成它。在它完成验证方法后,只有表单提交它才真正参与。如何控制此事件行为,当我使用 form.submit() 提交表单时,其余操作必须等到此表单返回到它的处理程序。

提前谢谢。

【问题讨论】:

  • 您能改写一下这个问题吗?如果我理解你,你想在提交之前等待验证完成。是这样吗?

标签: gwt gxt


【解决方案1】:

假设你有一个FormPanel:

FormPanel form = new FormPanel();

您可以添加处理程序:

form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {

    public void onSubmitComplete(SubmitCompleteEvent event) {
        // TODO: Do the next step in the wizard
        // Use event.getResults() to get the text of the response
    }
});

【讨论】:

  • 没关系。但你误解了这个问题。 pbm 是其他一些事件正在触发 form.submit() 函数。我希望函数必须等到 submit() 完成工作.. 上面的代码如何在这种情况下工作??
  • 无论哪个事件触发 form.submit(),提交完成处理程序仍然会触发。
  • 这里的问题是,触发 form.submit() 的函数必须等到表单的 onsubmitcomplete 监听函数完成。希望你现在明白了..
  • 听起来你在要求同步代码。浏览器中的 Javascript 是一个异步回调的世界。提交表单的方法不能这样等待。您必须以不同的方式思考如何编写代码:使向导步骤通过一组回调方法运行,而不是一个单一的方法。
  • 是的。我能理解这个问题。如果我想改变,那么我必须改变我代码中的大部分内容。它需要很多改变,我想它可能有其他方法来处理它。无论如何感谢您的帮助..
【解决方案2】:

编写一个布尔值,一旦验证完成,您将设置为 true。然后启动一个等待该布尔值的计时器。但是考虑使用事件和回调来重复使用。如果您过度使用计时器,使用计时器会使您的代码变得混乱。

@UiHandler("submit")
protected void onSubmit() {
    validated=false;
    validate();
    Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
        public boolean execute() {
            if (validated) {
               if (validationSucceeded()) {
                   submit();
               }
               return false;
            }
            return true;
        }
    }, 250);
}

private boolean validated = false;

private void validate() {
    // do validation
    validated=true;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2010-10-19
    • 2012-09-02
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多