我有一个网页,我需要用户点击保存按钮将表单内容保存回网络服务器。
保存的一部分是检查项目,这些项目可能需要提示用户,允许他们在javascript弹出窗口中确认,编辑和重新排序项目。
如果需要提示,我需要能够访问用户的响应,即单击确认或取消按钮,如果单击取消按钮,则必须停止保存过程,如果确认按钮单击保存过程必须继续:
同步行为的Psuedo代码:
function SaveData()
{
if (itemsRequireValidation)
{
if (RESPONSE_CANCEL == ConfirmationDialog.Show()) {
return;
}
}
ProcessConfirmData(ConfirmationDialog.OutputData);
//...Do the rest of the save process
}
鉴于:
确认对话框是一个构建一些HTML输出的Javascript对象,由于我们无法真正继续该过程,直到用户点击其中包含的确认或取消按钮这一事实引入了异步行为。对话框。
阻止代码使Javascript等到用户点击其中一个或另一个会产生负面行为,可能导致浏览器崩溃或阻止用户点击其中任何一个按钮。
如何重构这一点以考虑对话框本质上是异步的这一事实,但我需要处理用户交互,就好像它是同步的一样?
我认为我只是需要从另一个角度来看这个,现在我没有看到。
答案 0 :(得分:4)
使用回调。将ConfirmationDialog
允许回调函数作为选项,它可以在用户响应时调用这些函数。
function SaveDate() {
function HandleSave() {
// process rest of save
}
if (itemsRequireValidation)
{
ConfirmationDialog.Show({
RESPONSE_CANCEL: function() {
// cancelled, do nothing
},
RESPONSE_OK: function(output) {
ProcessConfirmData(output);
HandleSave();
}
});
} else {
HandleSave();
}
}
答案 1 :(得分:1)
我不明白为什么对话框会异步。我想我真的不明白你在问什么......在我看来,这很简单:
除非你在验证服务器端,否则,
validationResponse
validationResponse
收到回复,说明保存是否成功,还是需要进一步编辑