【发布时间】:2015-05-14 19:28:27
【问题描述】:
我有一部分页面绑定到了 Knockout Viewmodel。当我单击一个链接时,它会加载一些数据并将其显示得更远一点。我想在它出去并加载数据时显示一点加载img,然后在完成时将其隐藏。我有以下代码(精简以显示重要部分)。 Ajax 调用是 NOT 异步的,对于其他人正在使用的其他代码,它被设置为 false,所以我无法更改它。问题是“self.Loading(false)”在 ajax 调用完成之前不会被触发,所以它似乎根本没有出现。如果我将 ajax 调用切换为异步,它会按预期工作。所以我想知道为什么 Ajax 调用会阻止 observables 更改,因为它是在它之前调用的,它不应该立即触发。有没有办法强制它立即触发。
HTML:
<a data-bind="click: GetInfo" href="javascript:;">
<img data-bind="visible: Loading" src="myimg.jpg" alt="Loading" />
</a>
KO:
self.Loading = ko.observable(false);
self.GetInfo = function () {
self.Loading(true);
AjaxCall().done(function (data){
self.Loading(false);
}
};
【问题讨论】:
-
就像轶事一样,我上次看到一个基于非异步 XHR 构建的 Web 应用程序时,它已经无法挽救,不得不从头开始重写。