Xpages 在客户端完成之前防止触发服务器端事件
我有一个包含客户端代码和服务器端代码的按钮。clientside代码包含一个addCallback函数,用于根据第一次调用的结果执行其他代码。这一切都很好,但现在我正在尝试添加服务器端JS,以便在客户端完全完成后运行 出于某种原因,服务器端代码和刷新在调用第一个RPC后运行,并跳过客户端代码的其余部分 注意:我的RPC返回字符串“true”或“false” 服务器刷新在此处运行Xpages 在客户端完成之前防止触发服务器端事件,xpages,Xpages,我有一个包含客户端代码和服务器端代码的按钮。clientside代码包含一个addCallback函数,用于根据第一次调用的结果执行其他代码。这一切都很好,但现在我正在尝试添加服务器端JS,以便在客户端完全完成后运行 出于某种原因,服务器端代码和刷新在调用第一个RPC后运行,并跳过客户端代码的其余部分 注意:我的RPC返回字符串“true”或“false” 服务器刷新在此处运行 if (result == "false") { message = "Initiate Se
if (result == "false") {
message = "Initiate Settlement process failed";
$(".infoMessage").text(message);
atmRPC.updateInfoMsg(message);
} else if (result == "true"){
var tranType = "Settlement";
var deferredInner = atmRPC.settleATMInitiate(settlementCorrectYN, tranType, todayAmt, amtReceived, atmID);
deferredInner.addCallback(function(result){
alert("inner result=" + result)
if (result == "false") {
message = "";
$(".infoMessage").text(message);
atmRPC.updateInfoMsg(message);
} else if(result == "true"){
message = atmID + " has been successfully Settled."
$(".infoMessage").text(message);
atmRPC.updateInfoMsg(message);
}
})
}
}
)
如果服务器刷新是部分或完全刷新,则会发生这种情况。如何强制SSJS和相应的刷新仅在最后运行。延迟调用以异步方式执行,因此代码将继续运行并触发服务器代码。您需要将此调用更改为“同步”方式。(虽然强烈不建议这样做)您可以继续学习-让您的XPages按钮不提交并执行客户端代码 有一个带有类选择器的隐藏按钮,它也有一个显示样式:无 在你的回电中
$('.classSelector).click()
类选择器添加到要单击的XPages按钮中
<xp:button id="stevesId" styleClass="classSelector"></xp:button>
你好,史蒂夫。您为什么不在addCallback中作为辅助远程服务调用运行额外的SSJS呢?然后,您可以使用第二个远程服务的回调并执行partialRefreshGet/Post来代替标准的部分刷新?这将为您提供与以标准方式运行SSJS相同的效果。谢谢John!我确实使用了下面Marky的答案。这似乎也是一个很好的方法。
<xp:button id="stevesId" styleClass="classSelector"></xp:button>