Ho un sito SPA su cui sto lavorando, ho il requisito che tu possa avere subroutes per un modello di visualizzazione di pagina. Attualmente sto usando questo 'modello' per il sito
MyApp.FooViewModel = MyApp.define({
meta: {
query: MyApp.Core.Contracts.Queries.FooQuery,
title: "Foo"
},
init: function (queryResult) {
},
prototype: {
}
});
Nel modello di vista principale ho una tabella di percorso
this.navigation(new MyApp.RoutesViewModel({
Home: {
model: MyApp.HomeViewModel,
route: String.empty
},
Foo: {
model: MyApp.FooViewModel
}
}));
Il meta oggetto definisce quale query dovrebbe popolare il modello di vista di livello superiore quando è invocato tramite sammyjs, questo è tutto a posto ma non supporta il sottotitolaggio
Il mio piano è di cambiare il meta oggetto in modo che possa (offcourse opzionale) assomigliare a questo
meta: {
query: MyApp.Core.Contracts.Queries.FooQuery,
title: "Foo",
route: {
barId: MyApp.BarViewModel
}
}
Quando sammyjs rileva un barId nella stringa di query, il Barmodel verrà eseguito e popolato attraverso il proprio meta oggetto.
È un buon design?
modifica: Hmm, ho appena notato che sopra la progettazione non è sempre sufficiente, il modello di visualizzazione genitore potrebbe dover eseguire qualche elaborazione quando i trigger subRoute, quindi ho aggiunto un oggetto alla definizione inviata in MyApp .define come
meta: {
query: MyApp.Core.Contracts.Queries.FooQuery,
title: "Foo",
route: {
barId: MyApp.BarViewModel
}
},
onRoute: {
barId: function(barViewModel) {
//act on bar route
}
}