我有一个SSJS块,它可以复制创建数据库,然后将一堆文件复制到其中,基本结构是:
try{
getComponent("waitDialog").show(null);
// do stuff
}catch(e){
// do the error stuff
}finally {
getComponent("waitDialog").hide(null);
}
执行此代码的按钮执行完全刷新当我单击按钮时,Dialog出现并执行后台代码但是当它到达getComponent(" waitDialog")时.hide(null);它不会使对话框失效。我知道它到了最后,因为我在那时有一个输出到服务器控制台。我在其他地方使用对话框,getComponent()。hide(null)在它们中工作,但在这种情况下,我从对话框上的按钮关闭对话框,但我不想在这里做。另外我想删除" X"供用户关闭对话框。或者有更好的方法来做这种事情
答案 0 :(得分:2)
我喜欢这个代码,用于向所有页面添加备用控件http://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-dialog-custom-control。优点是它可以在所有按钮,链接等上工作,而无需向eventHandlers添加任何内容。
扩展库演示数据库,用于将数据加载到数据库的页面,显示了如何添加Loading ...消息。
答案 1 :(得分:1)
从它的声音中,您试图在一次往返中显示,然后从服务器隐藏对话框。你不能这样做。需要将对话框显示和隐藏发送回浏览器以进行UI更改,并且只有在刷新完成后才会发生。
在这种情况下,我希望你会像你一样得到意想不到的结果。如果我从逻辑上考虑它,我认为你永远不会看到对话框,但我必须追踪后端代码才能看到。
我的建议是进行部分刷新,并在刷新的onStart中显示某个正在处理的指示符,然后在onComplete(和onError)中删除指示符。我也不会使用对话框,因为你提到的原因(它使用户能够与UI进行交互。我会查看其他形式的进度指示器。例如,OpenNTF有一对可用,如果你搜索for" Partial Refresh" - > http://openntf.org/main.nsf/projects.xsp?query=partial%20refresh