我想将多个路径路由到同一个模板。例如,/abc/home
和/home
都会显示home
模板。路径也可以有子路径,因此abc/parent/child
和/parent/child
也应该路由到同一路径。
我可以简单地重复:
Router.route('/home', function () {
this.render('home');
Session.set('menu', 'home');
});
Router.route('/abc/home', function () {
this.render('home');
Session.set('menu', 'home');
});
但我不想重复。如果我想更改要路由到的模板,我想只更改一次 - 为了方便起见,并尽量减少错误。
我也可以使用参数:
Router.route('/:_abc/:path', function () {
if(this.params._abc == 'abc') {
switch(this.params.path) {
case 'home':
this.render('home');
break;
case 'someotherroute':
this.render('someotherroute');
break;
}
}
});
但是,这又是在重复自己。此外,还有子路径,我不想为/:_abc/:parent/:children
和/:_abc/:grandparent/:parent/:children/:
定义路由,因为它会很混乱。
我也尝试使用 Router.go()
:
Router.route('/:_abc/:route', function () {
if(this.params._abc == 'abc') {
Router.go('/' + this.params.route);
}
});
但这会从网址中删除/abc/
,这在我的情况下是不受欢迎的。
我现在拥有的最佳解决方案是使用共享功能:
var renderHome = function () {
this.render('home');
Session.set('menu', 'home');
}
Router.route('/home', renderHome());
Router.route('/abc/home', renderHome());
我可以改为执行指定数组或逗号分隔的字符串:
Router.route(['/home', '/abc/home'], function () {
this.render('home');
Session.set('menu', 'home');
});
// or
Router.route('/home, /abc/home', function () {
this.render('home');
Session.set('menu', 'home');
});
答案 0 :(得分:2)
使用与/home
和/abc/home
匹配的正则表达式(正则表达式)。
答案 1 :(得分:0)
我制作了第二个模板,仅包含第一个模板。在您的情况下,这可能如下所示:
<template name="abcHome">
{{> home}}
</template>