使用 Zk 6.5.11CE。
在模态窗口中,我有一个单击发送电子邮件的按钮。这是一个很长的操作,在等待时间我想使用 Clients.showBusy 阻止用户单击/修改我的模态窗口。
这是 ZUL
<window apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('viewmodel.EventView')">
...fill the form...
<button label="SEND" onClick="@command('send')" autodisable="self" />
</window>
这是Java EventView.java
@Command
@NotifyChange("*")
public void send() {
Clients.showBusy(winFather.getModalWin(), "Please wait...");
// ... do something ...
sendMail(); // it takes 2/3 seconds
Clients.clearBusy(winFather.getWinEvent());
}
winFather 是调用模态窗口的赢(我的主页),getModalWin() 获取模态窗口,其中我遇到了 showBusy 问题。希望很清楚:)
但是,我在网上搜索并在这里和这里发现了一些有趣的东西。所以我必须使用回声事件。
对于那些没有点击链接的人:
<window id="w" width="200px" title="Test echoEvent" border="normal">
<attribute name="onLater">
doLongOperation(); //take long to execute
Clients.clearBusy(); //remove the busy message
</attribute>
<button label="Echo Event">
<attribute name="onClick">
Clients.showBusy("Execute..."); //show a busy message to user
Events.echoEvent("onLater", w, null); //echo an event back
</attribute>
</button>
</window>
问题):
- 回声事件是解决问题的唯一机会,还是我忘了做一些事情来让 showBusy 正常工作?
- 因为我真的不想要我的 zul 页面中的代码,我如何在我的 viewModel 中定义这些东西?
如果我分配绑定值
disabled="@load('vm.busy')"
到我想在电子邮件发送期间禁用的所有组件,并将客户端 showBusy 和 clearBusy 替换为
busy = true; // Clients.showBusy(winFather.getModalWin(), "Please wait...");
...
busy = false; // Clients.clearBusy(winFather.getModalWin());
我遇到了同样的问题,电子邮件是在 zul 组件被禁用之前发送的。这似乎是一个同步问题。