Использование Knockout Mapping с JSON, содержащим гиперссылки

Я использую сервис RESTful WebAPI для возврата JSON с гипермедиа-связями, а затем попытался использовать отображение KnockoutJS для декодирования в модель представления, и оно продолжает давать сбой, хотя и не понимаю, почему. Мне приходится вручную анализировать строковый JSON, что означает, что мой клиент теперь стал специфичным для объекта, что устраняет гибкость решения, которое я выбрал.

Упрощенный пример, приведенный ниже, возвращает информацию об одном ресторане с парой действий в виде книги или электронной почты.

Вот этот JSON

{
    "Id": 1,
    "Name": "Kings Head",
    "NickName": "Kings",
    "_links": {
        "book": {
            "href": "/resturant/1/book",
            "title": "Book"
        },
        "email": {
            "href": "/resturant/1/email",
            "title": "Email"
        },
        "self": {
            "href": "/resturant/1"
        }
    }
}

Код, который работает:

var viewModel = {
   Name: ko.observable(),
   NickName: ko.observable()
};

$.getJSON('http://localhost:8080/resturants/1', function (jsonResult) {
   var str = JSON.stringify(jsonResult);
   var parsed = JSON.parse(str);
   viewModel.Name = (parsed.Name);
   viewModel.NickName = (parsed.NickName);
   ko.applyBindings(viewModel);
})

Если я попытаюсь использовать:

viewModel = ko.mapping.fromJS(jsonResult);

это терпит неудачу.

Любая помощь приветствуется.

Большое спасибо,

Shaun

1 ответ

Решение

Если вы используете jsonResult прямо из сервисного вызова, который, как я полагаю, вы, то вам нужно viewModel = ko.mapping.fromJSON(jsonResult); Проверьте скрипку с каждой настройкой сценария.

Другие вопросы по тегам