Есть ли способ сопоставить объект данных 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, но коллекции «города» и «улицы» заполнены универсальными объектами, а не экземплярами моих моделей просмотра городов и улиц.
В итоге они получают правильные наблюдаемые свойства и значения, они просто не являются экземплярами моих моделей представления, а это то, что мне нужно.