来自db的铁路由器路由

时间:2015-02-27 16:37:45

标签: mongodb meteor iron-router

我尝试从db加载我的路由。我的路线收集架构是:

AsideMenu.attachSchema(
new SimpleSchema({
    name: {
        type: String,
        denyUpdate: true
    },
    path: {
        type: String,
        denyUpdate: true
    },
    controller: {
        type: String,
        denyUpdate: true
    }
})

);

我还定义了一个发布和订阅的方法,一切运行良好,我可以在客户端上获取他有权访问的所有记录,但我无法让路由器注册它们。

    _.map(menuRoutes, function (route) {
    Router.route(route.path,
        {
            name: route.name,
            controller: route.controller,
        })
})

当我在客户端控制台中访问时:

console.log(Router.routes) I get []

如果我在服务器控制台中打印它,我会得到所有路线:

I20150227-19:02:47.753(2)?   { [Function]
I20150227-19:02:47.753(2)?     getName: [Function],
I20150227-19:02:47.753(2)?     findControllerConstructor: [Function],
I20150227-19:02:47.754(2)?     createController: [Function],
I20150227-19:02:47.754(2)?     setControllerParams: [Function],
I20150227-19:02:47.754(2)?     dispatch: [Function],
I20150227-19:02:47.754(2)?     path: [Function],
I20150227-19:02:47.754(2)?     url: [Function],
I20150227-19:02:47.755(2)?     params: [Function],
I20150227-19:02:47.755(2)?     get: [Function],
I20150227-19:02:47.755(2)?     post: [Function],
I20150227-19:02:47.755(2)?     put: [Function],
I20150227-19:02:47.755(2)?     delete: [Function],
I20150227-19:02:47.756(2)?     options: 
I20150227-19:02:47.756(2)?      { name: 'calendar.index',
I20150227-19:02:47.756(2)?        controller: 'CalendarController',
I20150227-19:02:47.756(2)?        data: [Function],
I20150227-19:02:47.756(2)?        mount: false },
I20150227-19:02:47.757(2)?     _actionStack: { _stack: [], length: 0 },
I20150227-19:02:47.757(2)?     _beforeStack: { _stack: [], length: 0 },
I20150227-19:02:47.757(2)?     _afterStack: { _stack: [], length: 0 },
I20150227-19:02:47.757(2)?     _methods: {},
I20150227-19:02:47.758(2)?     _path: '/calendar',
I20150227-19:02:47.758(2)?     handler: 
I20150227-19:02:47.758(2)?      { options: [Object],
I20150227-19:02:47.758(2)?        mount: false,
I20150227-19:02:47.758(2)?        method: false,
I20150227-19:02:47.759(2)?        where: 'client',
I20150227-19:02:47.759(2)?        name: 'calendar.index',
I20150227-19:02:47.759(2)?        path: '/calendar',
I20150227-19:02:47.759(2)?        compiledUrl: [Object],
I20150227-19:02:47.759(2)?        handle: [Circular],
I20150227-19:02:47.917(2)?        route: [Circular] },

我想知道这是否可行,因为我找不到这个方法的任何例子。

2 个答案:

答案 0 :(得分:2)

是的,这应该是可能的。我有一个类似的设置工作得很好,唯一的区别是我从静态数组创建路由,而不是数据库查询。但这应该会产生影响。

在加载期间执行时,这对我有用:

_.each(routes, function(foo, route) {
    Router.map(function () {
        this.route(route, {
            path: route,
            action: function() { ... }
        });
    });
});

您在何时/何时执行所显示的_.map代码?

答案 1 :(得分:0)

Iron路由器运行反应计算,但是当您对路由定义集合的订阅尚未准备好时。所以如果你把那个块放在你准备好的回调中,那就是:

Meteor.subscribe('router-data-publication', function() {
  /* construct your routes here*/
});

或者,您可以使用跟踪器中的句柄并检查处理程序上的.ready()来做更安全但基本相同的事情。