KnockoutJs - 如何"同步"订阅和点击活动?

时间:2016-08-08 09:56:49

标签: ajax knockout.js

简单的情况。我有文本框的形式,绑定到observables。 Observables订阅了一些逻辑(服务器验证,无论如何,只是一些ajax调用)。

表格上还有一个按钮,其中包含一些"保存数据"逻辑。只有在完成所有回调后才能保存数据。

当价值发生变化时会触发订阅,主要是焦点丢失,而不仅仅是每次更改。

现在您只需键入文本框中的任何内容,然后立即单击“保存”按钮。怎么了?调用Click事件,并保存数据。但它有时会更快,然后触发订阅事件并且服务器返回数据。

如何"同步"点击"完成"订阅的承诺?我需要在一切完成之前阻止保存数据。但是文本框值和按钮的订阅之间没有关系。一切都是异步的,所以我不能只是打电话给#34;等待功能"在点击事件中。其他问题应该是稍后触发订阅然后单击事件。

对此有何解决方案?

1 个答案:

答案 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);
  });
}