2015-04-03 189 views
0

我想订阅特定页面上的数据,所以我把subscribe()放在router.js的内部。我不确定是否应该把它放在Meteor.isClient()区块内。我是不是该?我什么时候会为服务器端做路由?订阅路由器

Router.route('/courses/:_id', function() { 
    if (Meteor.isClient) { 
    Meteor.subscribe("comments"); 
    } 
    this.render('CourseDetail', { .. }); 
}); 

回答

0

而是把if (Meteor.isClient){}检查你的router.js文件里的,你可以简单地删除检查,并把该文件的顶级client文件夹内的应用程序目录。这样,您就不必担心在服务器上处理您的路线了。在做出这样的转变,你可以构建上述路线定义的两种方法之一:

Router.route('/courses/:id', function() { 
    this.wait(Meteor.subscribe('comments')); // Either this one 
    this.subscribe('comments').wait(); // or this one. DO NOT DO BOTH. 

    if(this.ready()) { 
     this.render(); 
    } else { 
     this.render('CourseDetail'); 
    } 
}); 

或:

Router.route('/courses/:id', { 
    subscriptions: function() { 
     this.subscribe('comments'); 
    }, 
    action: function() { 
     this.render('CourseDetail'); 
    } 
}); 

注意,第一个选项传递函数作为第二个参数Router.route()功能而第二个选项将对象作为第二个参数传递给Router.route()函数。这两个选项都非常有效。有关第一个选项的信息,请检查this;有关第二个选项的信息,请查看this

至于什么时候你会做服务器端路由,通常这是通过设置你的应用的HTTP请求/响应部分来访问你的服务器的外部应用来完成的。除非是这种情况,否则你很可能永远不需要担心设置这样的事情。但是,在这样做的情况下,您可以定义您的路线并将它们放入应用程序目录中的顶层server文件夹中。有关服务器端路由的信息,请检查this

0

无需使用流星包装。铁路由器有自己的语法来说明你想要你的路线运行的地方。

这里是一个例子。

Router.route('/item', function() { var req = this.request; var res = this.response; res.end('hello from the server\n'); }, {where: 'server'}); 

这里是文档站点。

https://github.com/iron-meteor/iron-router/blob/devel/Guide.md

0

你应该定义在铁路由器路由onBeforeAction选择订阅。

Router.route('/courses/:_id', function() { 
    onBeforeAction: function() { 
     Meteor.subscribe("comments"); 
    }, 
    action: function(){ 
     this.render('CourseDetail', { .. }); 
    } 
}); 

Source