Понимание ko.mapping.fromJSON

У меня есть приложение ASP.NET MVC, которое использует WebAPI для данных и KnockOutJS во внешнем интерфейсе. По большей части все работает довольно хорошо, однако я начал понимать, что при обновлении значений эти значения не отражаются в связанных элементах.

Причина в том, что данные передаются с сервера как JSON и преобразуются в простой объект JSON. Другими словами, никакие свойства не отображаются как «наблюдаемые», поэтому, когда я меняю значения объекта, ничего не обновляется.

Я читал о добавленном мной плагине для KnockOutJS под названием «mapping», однако я не могу понять, какой синтаксис нужен для его работы. Я надеюсь, что кто-то еще разобрался с этим и есть несколько предложений. Вот мой текущий код:

<script type="text/javascript">
    function BlogViewModel() {
        var self = this;
        self.blogs = ko.observableArray();
        var baseUri = '@ViewBag.ApiUrl';

        //$.getJSON(baseUri, self.blogs);
        $.getJSON(baseUri, {},
                function (data) {
                    ko.mapping.fromJSON(data, self.blogs);
                });
    }

    $(document).ready(function () {
        ko.applyBindings(new BlogViewModel());
    });

    });
</script>

Закомментированная часть ($ .getJSON (baseUri, self.blogs);) - это то, что раньше было и «работает» в отношении получения и отображения данных.

Код чуть ниже - это моя попытка прочитать данные и применить к ним сопоставление. Это совсем не работает. Другими словами, я не вижу никаких данных на странице.

Я уверен, что упускаю что-то очевидное?


person Todd Davis    schedule 23.03.2013    source источник
comment
Оглянувшись назад во времени и увидев свой вопрос ... Вы нашли то, что искали? Если да, опубликуйте свой ответ!   -  person beauXjames    schedule 02.11.2013
comment
У меня точно такая же проблема. Иногда это происходит, когда объект обновляется на стороне сервера. После того, как я получил результат для просмотра, мне нужно запустить обновление DOM. Вы нашли какие-нибудь решения?   -  person Piotr Czyż    schedule 19.07.2016


Ответы (1)


Сопоставьте свои данные JSON с моделью просмотра следующим образом:

ko.mapping.fromJSON(data, {}, self.blogs);
person Jay    schedule 11.04.2014