8

Я пытаюсь использовать атрибут route-href внутри представления в дочернем маршрутизаторе. Мой родительский маршрутизатор выглядит так:Использование route-href с дочерними маршрутизаторами

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

    this.router = router; 
} 

Мой ребенок маршрутизатор выглядит так:

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

    this.router = router; 
} 

А вот мой маршрут-HREF атрибут ...

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

Когда я использую это, Я ожидаю, что route-href будет использовать маршруты от дочернего маршрутизатора. Вместо этого я получаю эту стек. Просматривая код, я вижу, что RouteHref называет router.generate для создания маршрута. router.generate должен рекурсивно подниматься по иерархии маршрутизатора, так что это не должно быть проблемой. Я не уверен, однако, какой маршрутизатор передается в конструктор route-href. Я думаю, здесь есть две проблемы: во-первых, я не уверен, получает ли route-href правильный маршрутизатор, а во-вторых, я не уверен, что или как route-href обрабатывает выражение с пустым маршрутом.

Стек след:

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)" 

Любые идеи? Благодарю.

+0

Пробовали ли вы использовать весь маршрут, а не только ид? – sam

+0

Также не похоже, что он обрабатывает ваш курс. – sam

+0

Да, я пробовал «маршрут: курсы, параметры: {id: course.id}», но это тоже не сработало. Он работал, прежде чем я представил дочерние маршрутизаторы. –

ответ

12

Похоже, что route-href использует свойство name.

Возможно, ваш ребенок маршрутизатор должен выглядеть следующим образом:

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

    this.router = router; 
} 

и на ваш взгляд:

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

№ 'route-href' передает' this.route' метод 'generate' маршрутизатора. 'generate' называет его параметр« name », но это не имеет никакого отношения к нему. Я попробовал это, и это не сработало. Хотелось бы этого, хотя. К сожалению, мне, вероятно, просто придется собрать тестовый пример. –

+0

Я беру это обратно, на самом деле. Я просматриваю это больше, и похоже, что вы можете быть прав - это все еще не работает, но похоже, что модуль маршрутизации-распознавателя смотрит на «route.handler.name», а конфигурация маршрута передается в как обработчик. Я действительно не уверен, как это работает. –

+1

Упс! Я только что заработал на своей машине. Мы использовали '' 'в' route-href', когда мы должны были использовать ';' * facepalm *. Я отредактировал ответ, теперь он должен работать. –