8

Sto tentando di utilizzare l'attributo route-href all'interno di una vista in un router figlio. Il mio router genitore si presenta in questo modo:Utilizzo di route-href con router figlio

configureRouter(config, router){ 
    config.title = 'Kali'; 
    config.map([ 
     // { route: '', moduleId: 'no-selection', title: 'Select'}, 
     { route: ['', 'courses'], moduleId: 'courses' } 
    ]); 

    this.router = router; 
} 

mio router bambino sembra in questo modo:

configureRouter(config, router){ 
    config.map([ 
     { route: ['', '/'], moduleId: 'no-selection', title: 'Select'}, 
     { route: '/:id', moduleId: 'courses/course-detail' } 
    ]); 

    this.router = router; 
} 

Ed ecco la mia attributo route-href ...

<a route-href="route: '', params: { id: course.id }" click.delegate="$parent.select(course.id)"> 

Quando uso questo, Mi aspetto che route-href utilizzi i percorsi dal router figlio. Invece, ottengo questo stacktrace. Guardando attraverso il codice, vedo che RouteHref chiama router.generate per creare il percorso. router.generate dovrebbe risalire la gerarchia del router in modo ricorsivo, quindi non dovrebbe essere un problema. Non sono sicuro, tuttavia, quale router viene passato al costruttore route-href. Penso che ci siano due problemi qui - in primo luogo, non sono sicuro se route-href stia ricevendo il router corretto, e in secondo luogo, non sono sicuro se o come route-href gestisca un'espressione con una rotta vuota.

traccia stack:

message: "There is no route named '', params: { id: course.id }" 
stack: "Error: There is no route named '', params: { id: course.id }↵ at RouteRecognizer.generate (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/index.js:244:19)↵ at AppRouter.generate (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/router.js:210:38)↵ at Router.generate (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/router.js:207:32)↵ at RouteHref.processChange (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/route-href.js:42:34)↵ at RouteHref.bind (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/route-href.js:30:16)↵ at BehaviorInstance.bind (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/behavior-instance.js:68:35)↵ at View.bind (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/view.js:68:26)↵ at ViewFactory.create (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/view-factory.js:173:18)↵ at BoundViewFactory.create (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/view-factory.js:127:35)↵ at Repeat.processArrayItems (http://localhost:9000/jspm_packages/github/aurelia/[email protected]/repeat.js:132:32)" 

Tutte le idee? Grazie.

+0

Hai provato a utilizzare il percorso completo invece del solo id? – sam

+0

Inoltre non sembra che stia elaborando il tuo course.id? – sam

+0

Sì, ho provato 'route: courses, params: {id: course.id}' ma non ha funzionato. Funzionava prima che introducessi i router figlio. –

risposta

12

Sembra che route-href utilizzi la proprietà name del percorso.

Forse il vostro router bambino dovrebbe assomigliare a questo:

configureRouter(config, router){ 
    config.map([ 
     { route: ['', '/'], moduleId: 'no-selection', title: 'Select'}, 
     { route: '/:id', moduleId: 'courses/course-detail', name: 'course-detail' } 
    ]); 

    this.router = router; 
} 

e nella vista:

<a route-href="route: course-detail; params.bind: { id: course.id }" ... 
+1

No. 'route-href' passa' this.route' al metodo 'generate' del router. 'generate' chiama il suo parametro" nome ", ma questo non ha nulla a che fare con esso. Ho provato questo, e non ha funzionato. Avrei voluto, però. Sfortunatamente, probabilmente dovrò mettere insieme un caso di prova per questo. –

+0

Lo prendo, in realtà. Sto guardando di più e sembra che tu possa essere corretto - questo ancora non funziona, ma sembra che il modulo di riconoscimento del percorso guardi a 'route.handler.name', e la configurazione del percorso sia passata in come gestore. Non sono davvero sicuro di come funzioni, comunque. –

+1

Whoops! L'ho appena fatto funzionare sulla mia macchina. Stavamo usando un ',' nella 'route-href' quando avremmo dovuto usare un'; '* facepalm *. Ho modificato la risposta, dovrebbe funzionare ora. –

Problemi correlati