如何使用iron构建动态路由:路由器?

时间:2015-08-20 11:02:15

标签: meteor iron-router

以下代码是我们实现路由的常用方法。

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取代时它不起作用。

提前致谢。

2 个答案:

答案 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中的集合。