Javascript 是否在不立即关闭对话框的情况下更新对话框?
我目前正试图通过Javascript打开一个对话框,并在显示对话框之前更新其元素 触发器来自primefaces push,所以我尝试通过JavaScript来处理它 基本上,流程是这样的:Javascript 是否在不立即关闭对话框的情况下更新对话框?,javascript,jsf,primefaces,Javascript,Jsf,Primefaces,我目前正试图通过Javascript打开一个对话框,并在显示对话框之前更新其元素 触发器来自primefaces push,所以我尝试通过JavaScript来处理它 基本上,流程是这样的: <p:socket onMessage="onStart" channel="/votingStartChannel" /> 请注意,我的对话框名为votingDialogWindow 另一个函数,votingDialogRefresh()正在触发以下事件: <h:form>
<p:socket onMessage="onStart" channel="/votingStartChannel" />
请注意,我的对话框名为votingDialogWindow
另一个函数,votingDialogRefresh()代码>正在触发以下事件:
<h:form>
<p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" />
</h:form>
在显示对话框之前,哪个“应该”更新对话框
但是,一旦启动流,对话框就会立即打开和关闭。我能像这样看3秒钟。而且,就我所见,在这个微小的时间跨度内,并没有任何更新,因为所有字段仍然并没有填充预期值
我做错了什么?您的技术问题是因为
执行了一个“触发并忘记”异步(ajax)请求而引起的。基本上,在发送ajax请求之后,votingDialogRefresh()
函数调用立即返回并前进到显示对话框的PF('votingDialogWindow')。show()
。但是当
的ajax响应稍后返回时,它将更新整个对话框。显然,对话框的默认状态是“关闭”。因此,它将在视觉上立即关闭。默认状态是通过visible
属性进行控制;如果您使用了visible=“#{facesContext.postback}”
,它会显示为已打开,这对用户体验很差,因为最终用户会看到对话框的内容在打开后很快得到更新/更改,这令人困惑
您应该在ajax请求完成并更新对话框时打开对话框,而不是在触发ajax请求之前,也不是在更新对话框之前。您只需将调用移动到
的oncomplete
即可实现这一点
<h:form>
<p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" />
</h:form>
function onStart(data) {
votingDialogRefresh();
}
<h:form>
<p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow"
oncomplete="PF('votingDialogWindow').show()" />
</h:form>