我使用PrimeFaces的日历组件。
<p:calendar id="hotelCalendar"
mode="inline"
beforeShowDay="disableDates"
pages="1">
<p:ajax event="dateSelect" listener="#{apartments.handleDateSelect}"
oncomplete="loadDisabledDates();" update="hotelCalendar"/>
</p:calendar>
逻辑:当用户点击日期时,后端应处理此日期并将其设置为已禁用。 在该日历从后端接收更新的禁用日期数组(使用ajax请求)后,重新加载所有日期(使用beforeShowDay)并使用不同的颜色标记它们。可用 - 绿色,禁用 - 红色。
问题:在update
事件后几乎立即执行日历dateSelect
。这就是我在下次点击之前看不到当前变化的原因。
问题:
loadDisabledDates()
完成后强制执行更新?答案 0 :(得分:3)
oncomplete
确实在update
之后运行。我不确定你为什么要反过来,the documentation清楚地说明了这一点。
基本上,这是事件调用顺序:
onclick
处理程序被调用process
onbegin
处理程序被调用onsuccess
处理程序被调用update
oncomplete
处理程序被调用因此,如果您想在执行ajax响应之后但在更新HTML DOM之前执行某些脚本,请使用onsuccess
而不是oncomplete
。