Il progetto "campioni" fornito con Durandal 2.0 è un esempio di come realizzare ciò che si desidera senza dover personalizzare il router. L'esempio che segue è tratto da quel progetto (e mostra anche come usare un router "figlio"). Osserva come i parametri moduleId nella chiamata a makeRelative e route config si combinano per darti la struttura di cartelle che desideri.
app/ko/index.js
define(['plugins/router', 'knockout'], function(router, ko) {
var childRouter = router.createChildRouter()
.makeRelative({
moduleId:'ko',
fromParent:true
}).map([
{ route: '', moduleId: 'helloWorld/index', title: 'Hello World', type: 'intro' },
{ route: 'helloWorld', moduleId: 'helloWorld/index', title: 'Hello World', type: 'intro', nav: 5},
{ route: 'clickCounter', moduleId: 'clickCounter/index', title: 'Click Counter', type: 'intro', nav: 4},
{ route: 'simpleList', moduleId: 'simpleList/index', title: 'Simple List', type: 'intro', nav: 3 },
{ route: 'betterList', moduleId: 'betterList/index', title: 'Better List', type: 'intro', nav: 2},
{ route: 'controlTypes', moduleId: 'controlTypes/index', title: 'Control Types', type: 'intro', nav: 1 },
{ route: 'collections', moduleId: 'collections/index', title: 'Collection', type: 'intro' , nav: 99 },
{ route: 'pagedGrid', moduleId: 'pagedGrid/index', title: 'Paged Grid', type: 'intro', nav: 98 },
{ route: 'animatedTrans', moduleId: 'animatedTrans/index', title: 'Animated Transition', type: 'intro', nav: true },
{ route: 'contactsEditor', moduleId: 'contactsEditor/index', title: 'Contacts Editor', type: 'detailed', nav: true },
{ route: 'gridEditor', moduleId: 'gridEditor/index', title: 'Grid Editor', type: 'detailed', nav: true },
{ route: 'shoppingCart', moduleId: 'shoppingCart/index', title: 'Shopping Cart', type: 'detailed', nav: true },
{ route: 'twitterClient', moduleId: 'twitterClient/index', title: 'Twitter Client', type: 'detailed', nav: 1}
])
.buildNavigationModel();
return {
router: childRouter,
introSamples: ko.computed(function() {
return ko.utils.arrayFilter(childRouter.navigationModel(), function(route) {
return route.type == 'intro';
});
}),
detailedSamples: ko.computed(function() {
return ko.utils.arrayFilter(childRouter.navigationModel(), function(route) {
return route.type == 'detailed';
});
})
};
});
Ho visto le altre risposte ai post riguardo l'annullamento di tale funzione. Dov'è il posto migliore per farlo? In shell.js prima di tornare? È per questo che il router è un parametro per il modulo shell.js, quindi puoi sovrascrivere le sue funzioni in quel posto? O c'è qualche altro posto che sarebbe meglio, come il modulo main.js? Grazie! – Jammerms
Ovunque tu lo faccia, inserirò tutte le tue configurazioni iniziali durandali in 1 posto. In questo modo sarà facile trovare e mantenere. –
Esiste una best practice per dove metterla? Metti le tue personalizzazioni in shell.js o main.js o da qualche altra parte? Grazie ancora. – Jammerms