编程语言
首页 > 编程语言> > javascript-更新对话框而没有立即关闭它?

javascript-更新对话框而没有立即关闭它?

作者:互联网

我目前正在尝试通过Javascript打开对话框,并在显示对话框本身之前更新其元素.

触发器来自primefaces推送,因此我尝试通过JavaScript处理所有事件.

基本上流程是这样的:

<p:socket onMessage="onStart" channel="/votingStartChannel" /> 

套接字触发以下JavaScript:

function onStart(data)
{                                                   
    votingDialogRefresh();
    PF('votingDialogWindow').show();
}

请注意,我的对话框称为votingDialogWindow.

另一个函数votingDialogRefresh();正在触发以下内容:

<h:form>
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" />
</h:form>

在对话框显示之前“应该”更新对话框.

但是,一旦我开始该流程,该对话框就会立即打开和关闭.我看到它像3秒钟.而且,据我所见,在这个很小的时间范围内,没有任何更新,因为所有字段仍未填充期望值.

我在这里做错了什么?

解决方法:

您的技术问题是由于< p:remoteCommand>执行“即发即弃”异步(ajax)请求.基本上,在发送了ajax请求之后,votingDialogRefresh()函数调用将立即返回并前进至PF(‘votingDialogWindow’).show(),该对话框将显示对话框.但是,当< p:remoteCommand>的ajax响应出现时,稍后返回,它将更新整个对话框.显然,对话框的默认状态为“关闭”.因此它将在视觉上立即关闭.默认状态可以通过visible属性控制.如果您使用了visible =“#{facesContext.postback}”,它将显示为已打开,这对于用户体验来说很糟糕,因为最终用户会在对话框打开后不久看到对话框的内容被更新/更改,这很令人困惑.

您应该在ajax请求完成且对话框更新后打开对话框,而不是在触发ajax请求之前或更新对话框之前.您只需将调用移至< p:remoteCommand>的oncomplete即可实现.

function onStart(data) {
    votingDialogRefresh();
}
<h:form>
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" 
        oncomplete="PF('votingDialogWindow').show()" />
</h:form>

标签:jsf,primefaces,javascript
来源: https://codeday.me/bug/20191027/1942062.html