GWT,如何正确制作装载标签?
我得到了一个复杂的循环,可能需要1或2秒才能显示结果,所以我想做一个指示,告诉用户等待程序完成处理,所以我做了一个标签(“…加载…”)&在程序开始时将visible设置为false&在执行循环之前将visible显示为true,然后在循环完成后将visible设置为falseGWT,如何正确制作装载标签?,gwt,loading,visible,Gwt,Loading,Visible,我得到了一个复杂的循环,可能需要1或2秒才能显示结果,所以我想做一个指示,告诉用户等待程序完成处理,所以我做了一个标签(“…加载…”)&在程序开始时将visible设置为false&在执行循环之前将visible显示为true,然后在循环完成后将visible设置为false Label-loadingLabel=新标签(“…加载…”); public void onBind(){ loadingLabel.setVisible(假); } 公共作废一次点击(点击事件){ loadingLabe
Label-loadingLabel=新标签(“…加载…”);
public void onBind(){
loadingLabel.setVisible(假);
}
公共作废一次点击(点击事件){
loadingLabel.setVisible(true);
//这里有很多圈
loadingLabel.setVisible(假);
}
但是在运行之后,我没有看到标签。那么,怎样才能使加载标签正确显示呢。首先,检查您是否正在将
标签添加到UI中,也许您没有发布代码的这一部分,但显然它应该在onBind
其次,//这里有很多循环
是同步的还是异步的?。如果是异步的,则必须在回调函数的末尾隐藏标签
通常我更喜欢使用EventBus
,当一个大进程启动时(要么是一个同步循环,要么是一个异步调用链),我调用EventBus.fire(…)
,然后当最后一件事完成时,我再次调用EventBus.fire(…)
Label loadingLabel=新标签(“”);
RootPanel.get().add(loadingLabel);
loadingLabel.setVisible(false)
addHandler(LoadingEvent.TYPE,新的LoadingEvent.Handler(){
公共无效onRequestEvent(加载事件ev){
if(ev.getMessage()==null){
loadingLabel.setVisible(假);
}否则{
加载label.setText(ev.getMessage());
loadingLabel.setVisible(true);
}
}
});
//显示标签并显示自定义消息
eventBus.fire(新加载事件(“消息”))
//这里有很多圈
//隐藏标签
eventBus.fire(新加载事件(null))
当然,使用这种方法,您可以拥有一个更复杂的加载小部件。我认为您需要在循环中显示一些进展。Javascript只有一个线程。所以你不能这样做。您必须使用某种机制分割javascript的执行。你可以用它
Scheduler.get().scheduleIncremental(new RepeatingCommand() {
@Override
public boolean execute() {
if(somecodtion)
{
loadingLabel.setVisible(true);
return false;
}
else
{
loadingLabel.setVisible(false);
return true;
}
}