У меня есть раздел моей страницы, связанный с моделью просмотра нокаутов. Когда я нажимаю ссылку, он загружает некоторые данные и отображает их немного дальше. Я хочу показать небольшую загрузку img, пока она гаснет, и загружает данные, а затем скрывает их, когда они завершены. У меня есть следующий код (урезанный, чтобы показать важные части). Вызов Ajax равен NOT async, для него был установлен false для другого кода, который использует кто-то другой, поэтому я не могу его изменить. Проблема заключается в том, что «self.Loading (false)» не запускается до тех пор, пока вызов ajax не будет завершен, поэтому он вообще не появляется. Если я переключу вызов ajax на async, он будет работать по назначению. Поэтому мне интересно, почему вызов Ajax блокирует изменение наблюдаемых, так как он вызывается перед ним, не следует немедленно его запускать. Есть ли способ заставить его немедленно запускать.Сделать нокаут наблюдаемым применить немедленно?
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);
}
};
Так же, как анекдот, в последний раз, когда я видел веб-приложение, которое было построено на не-async XHR, оно было труднопроизносимым и должно было быть перезаписано с нуля. –