在客户端完成之前阻止服务器端事件触发
Prevent Server side event from firing until clientside is done
我有一个包含客户端代码和服务器端代码的按钮。客户端代码包含一个 addCallback 函数,用于根据第一个结果执行其他代码。这一切都很好,但现在我试图在客户端完全完成后将服务器端 JS 添加到 运行。
由于某些原因,服务器端代码和刷新在第一个 RPC 调用后 运行ning 并跳过客户端代码的其余部分。
注意:我的 RPC returns 一个字符串 "true" 或 "false".
message = "Starting Initiate Settlement Process...";
$(".infoMessage").text(message);
atmID = $("input.atmID").val(); //pull from hidden input
settlementCorrectYN = $( "input:checked" ).val();
todayAmt = $( ".todayAmt" ).val();
amtReceived = $( ".amtRec" ).val();
var tranType = "Settlement";
var deferred = atmRPC.closeATMSettle(tranType);
deferred.addCallback(function(result){
alert("first result=" + result);
服务器刷新在此处运行
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 和随附的刷新到 运行 仅在最后。
延迟调用以异步方式执行,因此代码保持运行并触发服务器代码。您需要将此调用更改为 "synchronous" 方式。 (虽然强烈不推荐这样做)
您可以老一套 - 让您的 XPages 按钮不提交并执行您的客户端代码。
有一个带有class选择器的隐藏按钮,它的样式也是display:none
在你的回调中
$('.classSelector).click()
class 选择器添加到您要单击的 XPages 按钮的位置
<xp:button id="stevesId" styleClass="classSelector"></xp:button>
我有一个包含客户端代码和服务器端代码的按钮。客户端代码包含一个 addCallback 函数,用于根据第一个结果执行其他代码。这一切都很好,但现在我试图在客户端完全完成后将服务器端 JS 添加到 运行。
由于某些原因,服务器端代码和刷新在第一个 RPC 调用后 运行ning 并跳过客户端代码的其余部分。
注意:我的 RPC returns 一个字符串 "true" 或 "false".
message = "Starting Initiate Settlement Process...";
$(".infoMessage").text(message);
atmID = $("input.atmID").val(); //pull from hidden input
settlementCorrectYN = $( "input:checked" ).val();
todayAmt = $( ".todayAmt" ).val();
amtReceived = $( ".amtRec" ).val();
var tranType = "Settlement";
var deferred = atmRPC.closeATMSettle(tranType);
deferred.addCallback(function(result){
alert("first result=" + result);
服务器刷新在此处运行
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 和随附的刷新到 运行 仅在最后。
延迟调用以异步方式执行,因此代码保持运行并触发服务器代码。您需要将此调用更改为 "synchronous" 方式。 (虽然强烈不推荐这样做)
您可以老一套 - 让您的 XPages 按钮不提交并执行您的客户端代码。
有一个带有class选择器的隐藏按钮,它的样式也是display:none
在你的回调中
$('.classSelector).click()
class 选择器添加到您要单击的 XPages 按钮的位置
<xp:button id="stevesId" styleClass="classSelector"></xp:button>