C'è un modo per mappare un oggetto dati JSON su un array osservabile e quindi a turno ogni elemento dell'array osservabile essere inizializzato in un tipo di modello di vista specifico?Mappare i dati JSON a Knockout osservabileArray con tipo di vista specifico tipo
Ho guardato tutta la documentazione di eliminazione diretta insieme con gli esempi ad eliminazione diretta e la mappatura qui e non riesco a trovare una risposta che funziona per quello che sto cercando.
Così, ho i seguenti dati JSON:
var data = {
state : {
name : 'SD',
cities : [{
name : 'Sioux Falls',
streets : [{
number : 1
}, {
number : 3
}]
}, {
name : 'Rapid City',
streets : [{
number : 2
}, {
number : 4
}]
}]
}
};
E ho i seguenti vista modelli:
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();
}
E 'possibile, con la data struttura dei dati e l'utilizzo di plug-in mapping di eliminazione diretta, per far sì che il risultante StateViewModel contenga un ObservableArray popolato con 2 CityViewModels e ogni CityViewModel contenente un observableArray popolato con 2 StreetViewModels?
Attualmente utilizzando il plugin mappatura Sono in grado di farlo per mappare una StateViewModel, ma le 'città' e collezioni 'strade' sono popolati da oggetti generici al posto di istanze della mia città e Via modelli di visualizzazione.
Finiscono con le proprietà osservabili corrette e valori su di loro, non sono solo le istanze dei miei modelli di vista, che è quello che sto cercando.
ho avuto un follow-up domanda però: durante la creazione di 'Le classifiche delle città, sembra che la mappatura' create' in realtà restituisce un singolo oggetto di tipo 'CityViewModel', ed è passato un oggetto di città. Cosa faresti se volessi avere un tipo di raccolta come 'CitiesViewModel' con i propri metodi di raccolta? –
Sembra fantastico? Ma cosa fa il 'this. $ Type = '..Model? Nei costruttori? Non riesco a trovare nulla su una proprietà '$ tipo' nella documentazione Knockout o Knockout.mapping online. – Bart
$ type non è effettivamente necessario ... solo per dimostrare che il costruttore è stato chiamato. – Artem