Сопоставление данных JSON с наблюдаемым массивом Knockout с определенным типом модели представления

Есть ли способ сопоставить объект данных JSON с наблюдаемым массивом, а затем, в свою очередь, инициализировать каждый элемент наблюдаемого массива в модели представления определенного типа?

Я просмотрел всю документацию по нокауту, а также примеры нокаута и сопоставления здесь, и я не могу найти ни одного ответа, который подходит для того, что мне нужно.

Итак, у меня есть следующие данные JSON:

    var data = {
    state : {
        name : 'SD',
        cities : [{
            name : 'Sioux Falls',
            streets : [{
                number : 1
            }, {
                number : 3
            }]
        }, {
            name : 'Rapid City',
            streets : [{
                number : 2
            }, {
                number : 4
            }]
        }]
    }
};

И у меня есть следующие модели представлений:

var StateViewModel = function(){
    this.name = ko.observable();
    this.cities = ko.observableArray([new CityViewModel()]);
}

var CityViewModel = function(){
    this.name = ko.observable();
    this.streets = ko.observableArray([new StreetViewModel()]);
}

var StreetViewModel = function(){
    this.number = ko.observable();
}

Возможно ли, с заданной структурой данных и с помощью подключаемого модуля нокаута, чтобы результирующая модель StateViewModel содержала заполненный observableArray с 2 моделями CityViewModel, и каждая модель CityViewModel, содержащая observableArray, заполненная 2 моделями StreetViewModels?

В настоящее время с помощью подключаемого модуля сопоставления я могу заставить его сопоставляться с StateViewModel, но коллекции «города» и «улицы» заполнены универсальными объектами, а не экземплярами моих моделей просмотра городов и улиц.

В итоге они получают правильные наблюдаемые свойства и значения, они просто не являются экземплярами моих моделей представления, а это то, что мне нужно.

41
задан Koen Peters 20 April 2015 в 18:45
поделиться