我有一個頁面綁定到Knockout Viewmodel。當我點擊一個鏈接時,它會加載一些數據並將其顯示得更遠一點。我想在顯示一個加載img的同時將其加載並加載數據,然後在完成時將其隱藏。我有以下代碼(剝離顯示重要部分)。 Ajax調用是不是異步,它被設置爲false其他代碼別人正在使用,所以我不能改變它。問題是「self.Loading(false)」在ajax調用完成之前不會被觸發,所以它看起來完全不會顯示出來。如果我將ajax調用切換到異步,它將按預期工作。所以我想知道爲什麼Ajax調用阻止了可觀察變量,因爲它在它之前被調用,不應該立即觸發。有沒有辦法迫使它立即觸發。使Knockout observable立即適用?
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應用程序時,它是無法解決的,必須從頭開始重寫。 –