Czy istnieje sposób odwzorowania obiektu danych JSON na tablicę obserwowalną, a następnie z kolei każda pozycja tablicy obserwowalnej zostanie zainicjowana na określony typ modelu widoku?Odwzorowuj dane JSON na Nook do obserwowaniaArray z określonym typem widoku widoku
Przyjrzałem się całej dokumentacji nokautu wraz z przykładami nokautu i mapowania tutaj i nie mogę znaleźć żadnej odpowiedzi, która działa na to, czego szukam.
Więc mam następujące dane JSON:
var data = {
state : {
name : 'SD',
cities : [{
name : 'Sioux Falls',
streets : [{
number : 1
}, {
number : 3
}]
}, {
name : 'Rapid City',
streets : [{
number : 2
}, {
number : 4
}]
}]
}
};
I mam następujące modele wyświetlania:
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();
}
Czy to możliwe, przy danej struktury danych i za pomocą wtyczki mapowania nokaut, w mieć wynik StateViewModel zawierać observableArray wypełnione 2 CityViewModels, a każdy CityViewModel zawierający observableArray wypełnione 2 StreetViewModels?
Obecnie za pomocą wtyczki mapowania mogę go zmapować do StateViewModel, ale kolekcje "miast" i "ulic" są wypełnione obiektami ogólnymi, a nie instancjami modeli widoku Miasto i Ulica.
Kończą się właściwymi obserwowalnymi właściwościami i wartościami na nich, po prostu nie są instancjami moich modeli widokowych, po to właśnie jestem.
ja miałem jeden śledzić pytanie jednak: podczas tworzenia 'cities', wygląda na to, że' mapping create' faktycznie zwraca pojedynczy obiekt typu 'CityViewModel' i jest przekazywana obiekt miejski. Co byś zrobił, gdybyś chciał mieć typ kolekcji podobny do 'CitiesViewModel' z własnymi metodami zbierania? –
Wygląda świetnie? Ale co robi 'this. $ Type = '..Model' w konstruktorach? Nie mogę znaleźć niczego na temat właściwości '$ type' w dokumentacji Knockout lub Knockout.mapping. – Bart
Typ $ nie jest faktycznie potrzebny ... tylko po to, aby pokazać, że konstruktor został wywołany. – Artem