相关疑难解决方法(0)

使用GWT调度程序

我有一个艰难的时间,了解各种方法之间的差异com.google.gwt.core.client.Scheduler接口,具体而言,scheduleDeferred,scheduleFinally,和scheduleIncremental方法.

我认为,由于我不熟悉调度程序文档所涉及的浏览器事件处理循环,因此我的理解受到了阻碍.

您能否解释一下这些方法之间的区别,以及它们如何与浏览器事件循环相关联?

browser gwt scheduling event-handling

26
推荐指数
1
解决办法
1万
查看次数

GWT PopupPanel未在正确的时间显示

我有一个单击按钮就调用的函数,它需要很长时间才能创建一些元素并将其附加到DOM,所以我想在函数完成操作后显示带有“正在加载”图标的PopupPanel。做。请注意,我的函数不会调用服务器,它只会在UI中创建一些元素,这些元素需要很长时间才能计算出来,因此我没有onSuccess()事件或回调函数。

所以我有我的PopupPanel:

pp = new PopupPanel();
pp.setTitle("loading....");
pp.setGlassEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后在点击处理程序上,我有以下代码:

public void onClick(ClickEvent event) {
  pp.show();
  functionWhichTakesaLongTimeToExecute();               
  pp.hide();
}
Run Code Online (Sandbox Code Playgroud)

由于JavaScript是单线程的,因此我期望PopUp会出现,然后执行functionWhichTakesaLongTimeToExecute(),然后将PopUp隐藏,但是发生的是首先执行functionWhichTakesaLongTimeToExecute(),这需要很长时间才能将元素附加到DOM,并且只有在完成工作后才显示PopUp,然后将其隐藏。好像代码是:

functionWhichTakesaLongTimeToExecute(); 
pp.show();                  
pp.hide();
Run Code Online (Sandbox Code Playgroud)

更让我困扰的是,如果我在pp.show()之后添加Window.alert(“ test”),这将中断流程,直到按下警报中的“确定”按钮,这会导致PopUp出现在警报和在调用functionWhichTakesaLongTimeToExecute()之前。因此,以下代码按预期工作:

pp.show();
Window.alert("test");
functionWhichTakesaLongTimeToExecute();                 
pp.hide(); 
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么在调用functionWhichTakesaLongTimeToExecute()之前为什么不显示PopUp,而是“等待” functionWhichTakesaLongTimeToExecute()执行,直到它显示之后,以及为什么添加Window.alert(“ test ”)使其正确显示?
PS:我已经在IE8和Chrome中测试了代码,并且行为相同。

javascript gwt

2
推荐指数
1
解决办法
306
查看次数

标签 统计

gwt ×2

browser ×1

event-handling ×1

javascript ×1

scheduling ×1