简单的情况。我有文本框的形式,绑定到observables。 Observables订阅了一些逻辑(服务器验证,无论如何,只是一些ajax调用)。
表格上还有一个按钮,其中包含一些"保存数据"逻辑。只有在完成所有回调后才能保存数据。
当价值发生变化时会触发订阅,主要是焦点丢失,而不仅仅是每次更改。
现在您只需键入文本框中的任何内容,然后立即单击“保存”按钮。怎么了?调用Click事件,并保存数据。但它有时会更快,然后触发订阅事件并且服务器返回数据。
如何"同步"点击"完成"订阅的承诺?我需要在一切完成之前阻止保存数据。但是文本框值和按钮的订阅之间没有关系。一切都是异步的,所以我不能只是打电话给#34;等待功能"在点击事件中。其他问题应该是稍后触发订阅然后单击事件。
对此有何解决方案?
答案 0 :(得分:1)
添加变量以管理按钮状态 -
<button data-bind="disable: serverSideCheckInProgress">Save Data</button>
在你的ajax电话中 -
//declare serverSideCheckInProgress false on init
saveData = function(){
serverSideCheckInProgress(true);
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
serverSideCheckInProgress(false);
});
}