将所有数据获取点放在帮助程序中会更有条理。所以你可以这样做:
routes.js
Router.route('/post/:_id', {
name: 'post',
template: 'post'
});
post.js
Template.post.helpers({
post: function() {
var postId = Router.current().params._id;
return Posts.findOne({_id: postId});
}
});
请记住,如果您没有在任何其他文件中订阅(帖子),您可以在路由器本身中订阅:
routes.js(订阅)
Router.route('/post/:_id', {
name: 'post',
template: 'post',
waitOn: function() {
return Meteor.subscribe('posts');
}
});
更新:
Router.current().params._id 似乎有问题,它将返回之前运行的该路线的所有 Id。
所以重组的方式应该是(来自我的应用程序的例子):
route.js
Router.route('/play/:gameId', {
name: 'play',
template: 'gamesPlay',
waitOn: function() {
return Meteor.subscribe('games');
},
onBeforeAction: function() {
Session.set('gameId', this.params.gameId);
console.log('game id set '+Session.get('gameId'));
this.next();
},
onStop: function() {
// do something when user navigate away from this route
}
});
games.js
Template.gamesPlay.helpers({
game: function() {
var gameId = Session.get('gameId'); //instead of Router.current().params.gameId;
var game = Games.findOne({_id: gameId});
return game;
}
});