Я только что начал попробовать knockout.js. Ko.mapping предлагает отличный способ получить и отобразить данные с сервера. Однако я не могу заставить отображение работать.
У меня есть простая модель:
//var helloWorldModel;
var helloWorldModel = {
name: ko.observable('Default Name'),
message: ko.observable('Hello World Default')
};
$(document).ready(function() {
ko.applyBindings(helloWorldModel);
//a button on the form when clicked calls a server class
//to get json output
$('#CallServerButton').click(getDataFromServer);
});
function getDataFromServer() {
$.getJSON("HelloSpring/SayJsonHello/chicken.json", function(data) {
mapServerData(data);
});
}
function mapServerData(serverData) {
helloWorldModel = ko.mapping.fromJS(serverData, helloWorldModel);
alert(JSON.stringify(serverData));
}
У helloWorldModel есть только 2 атрибута - то же самое, что я возвращаюсь с сервера. Предупреждение в mapServerData показывает -
{"name":"chicken","message":"JSON hello world"}
Я просмотрел другие сообщения, касающиеся аналогичной проблемы, но никто из них, похоже, не решил эту проблему. Может быть, мне не хватает чего-то очень элементарного - интересно, может ли кто-нибудь указать это.
Также обратите внимание, если я не объявляю модель upfront и использую
helloWorldModel = ko.mapping.fromJS(serverData);
он правильно отображает данные в мою форму.