如何避免铁路由器中的类似路线?
How to avoid similar route in iron-router?
抱歉英语不好。
我有一个有四个标签的标签,每个标签都有一条路线
<ul class="nav nav-tabs">
<li role="presentation"><a href="{{pathFor 'menu.tab1'">tab1</a></li>
<li role="presentation"><a href="{{pathFor 'menu.tab2'">tab2</a></li>
<li role="presentation"><a href="{{pathFor 'menu.tab3'">tab3</a></li>
<li role="presentation"><a href="{{pathFor 'menu.tab4'">tab4</a></li>
</ul>
和route.js
this.route('/menu/tab1', {
name: 'menu.tab1',
template: 'MenuTab1',
});
this.route('/menu/tab2', {
name: 'menu.tab2',
template: 'MenuTab2',
});
this.route('/menu/tab3', {
name: 'menu.tab3',
template: 'MenuTab3',
});
this.route('/menu/tab4', {
name: 'menu.tab4',
template: 'MenuTab4',
});
我可以简化这些类似的代码吗?
正如@Petr 所暗示的,您可以重构代码以使用数组。
var tabs = [{
label: "tab1",
route: {
path: "/menu/tab1",
name: "menu.tab1",
template: "MenuTab1"
}
},{
[...]
}];
tabs.forEach(function(tab){
var route = tab.route;
Router.route(route.path,{
name: route.name,
template: route.template
});
});
Template.tabs.helpers({
tabs: tabs
});
HTML
<template name="tabs">
<ul class="nav nav-tabs">
{{#each tabs}}
<li role="presentation">
<a href="{{pathFor route.name}}">label</a>
</li>
{{/each}}
</ul>
</template>
如果您的选项卡遵循关于命名方案的确切模式,您甚至可以更进一步:
var tabs = [{
id: "tab1",
label: "Tab 1"
},{
[...]
}];
tabs = tabs.map(function(tab){
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
//
return {
label: tab.label,
route: {
path: "/menu/" + tab.id,
name: "menu." + tab.id,
template: "Menu" + capitalizeFirstLetter(tab.id)
}
};
});
抱歉英语不好。
我有一个有四个标签的标签,每个标签都有一条路线
<ul class="nav nav-tabs">
<li role="presentation"><a href="{{pathFor 'menu.tab1'">tab1</a></li>
<li role="presentation"><a href="{{pathFor 'menu.tab2'">tab2</a></li>
<li role="presentation"><a href="{{pathFor 'menu.tab3'">tab3</a></li>
<li role="presentation"><a href="{{pathFor 'menu.tab4'">tab4</a></li>
</ul>
和route.js
this.route('/menu/tab1', {
name: 'menu.tab1',
template: 'MenuTab1',
});
this.route('/menu/tab2', {
name: 'menu.tab2',
template: 'MenuTab2',
});
this.route('/menu/tab3', {
name: 'menu.tab3',
template: 'MenuTab3',
});
this.route('/menu/tab4', {
name: 'menu.tab4',
template: 'MenuTab4',
});
我可以简化这些类似的代码吗?
正如@Petr 所暗示的,您可以重构代码以使用数组。
var tabs = [{
label: "tab1",
route: {
path: "/menu/tab1",
name: "menu.tab1",
template: "MenuTab1"
}
},{
[...]
}];
tabs.forEach(function(tab){
var route = tab.route;
Router.route(route.path,{
name: route.name,
template: route.template
});
});
Template.tabs.helpers({
tabs: tabs
});
HTML
<template name="tabs">
<ul class="nav nav-tabs">
{{#each tabs}}
<li role="presentation">
<a href="{{pathFor route.name}}">label</a>
</li>
{{/each}}
</ul>
</template>
如果您的选项卡遵循关于命名方案的确切模式,您甚至可以更进一步:
var tabs = [{
id: "tab1",
label: "Tab 1"
},{
[...]
}];
tabs = tabs.map(function(tab){
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
//
return {
label: tab.label,
route: {
path: "/menu/" + tab.id,
name: "menu." + tab.id,
template: "Menu" + capitalizeFirstLetter(tab.id)
}
};
});