У меня простой пример использования. Мне нужно асинхронно вызывать WS и показывать возвращенный JSON в пользовательском интерфейсе. JSON, который я возвращаю, является объектом с несколькими свойствами. Для простоты приведенный ниже код имеет только одно свойство. Поскольку у меня есть несколько свойств, я использую ko.mapping.fromJS для сопоставления JSON с свойствами объекта. Все это, похоже, работает, за исключением того, что извлеченные данные не обновляются в пользовательском интерфейсе. Если я вручную обновляю наблюдаемый, он работает. Но не при использовании ko.mapping.fromJS.Обновление нокаута наблюдаемого после асинхронного вызова ajax с использованием ko.mapping.fromJS
Javascript
function AppViewModel() {
var self = this;
self.firstName = ko.observable("Bert");
$.ajax({
dataType: 'json',
async: true,
type: 'POST',
url: '/echo/json/',
data: {
json: '{"firstName":"Bob1"}'
}
}).done(function(data) {
console.log(data);
//self.firstName(data.firstName);//This works
self = ko.mapping.fromJS(data); //This doesn't
console.log(self.firstName());
}).fail(function(jqxhr, textStatus, error) {
alert('there was an error');
});
}
// Activates knockout.js
var avm = new AppViewModel();
ko.applyBindings(avm);
HTML
<p>First name: <strong data-bind="text: firstName"></strong></p>
Вы можете запустить jsfiddle. Вы увидите, что эта линия работает
self.firstName(data.firstName);//This works
и эта линия не работает
self = ko.mapping.fromJS(data); //This doesn't
http://jsfiddle.net/texag93/fakdf5Lw/53/
Отлично, спасибо! Это то, чего мне не хватало. – Mike