以下代码是我们实现路由的常用方法。
Router.route('/', function(){
this.render("", {to: 'content'});
});
Router.route('/user/add', function(){
this.render("templateName", {to: 'content'});
});
而不是上面我只是尝试从集合中构建路线图。例如:
var allRoutes = [{
"name" : "userDetail",
"path" : "/user/add",
"template" : [
{
"name" : "addUser",
"section" : "content"
}
],
"options" : null
}, {
"name" : "default",
"path" : "/",
"template" : [
{
"name" : "default",
"section" : "content"
}
],
"options" : null
}];
for(var i=0;i<allRoutes.length;i++){
Router.route(allRoutes[i].path, function(){
var templates = allRoutes[i].template;
for(var t=0;t<templates.length;t++){
this.render(templates[t].name, {to:templates[t].section});
}
});
}
构建路径映射的方式可以在浏览器控制台中看到,但是当url取代时它不起作用。
提前致谢。
答案 0 :(得分:0)
在运行期间调用时,您定义的函数具有未定义的变量(allRoutes[i]
仅在执行for循环期间定义良好,而不是在执行路径函数期间定义。)
使用路线选项而不是功能http://iron-meteor.github.io/iron-router/#route-options:
for(var i=0;i<allRoutes.length;i++){
var t = allRoutes[i].template[0];
Router.route(allRoutes[i].path, {
template: t.name;
data: t.section);
}
});
}
顺便说一句,你不能为每条路线渲染多个模板。
答案 1 :(得分:0)
for(var i=0;i<allRoutes.length;i++){
Router.route(allRoutes[i].path, renderTemplate(allRoutes[i].template));
}
// it renders the templates on router callback
function renderTemplate(templates){
return function(){
for(var t=0;t<templates.length;t++){
this.render(templates[t].name, {to:templates[t].section});
}
}
}
这是使用相应的“Yield”部分进行多个模板渲染的一种方法。它可以在客户端中使用临时数组,但不能使用MongoDB中的集合。