我对Meteor(尤其是铁路由器)相对较新,并且一直坚持以下问题......
我有一条路线显示有关单个帖子的详细信息:
this.route('singlePost',{
path:'/posts/:_id',
data:function(){
return Posts.findOne(this.params._id);
}
});
这很好用,但我希望能够在网址中显示帖子所有者的用户名,而不是静态的" / posts /"路径,例如:
this.route('singlePost',{
path:'/:username/:_id',
data:function(){
return Posts.findOne(this.params._id);
}
});
post对象包括所有者的用户ID,但不包括用户名(用户名在Meteor.users集合中)。
当我尝试使用2个动态值(用户名,帖子ID)设置路由时,pathFor链接消失(我假设因为它无法找到&#34;用户名&#34;在返回的post对象中)。< / p>
如何获取识别用户名的路线?我假设对Users集合有一些查找功能,但我不确定何时/何。另外,我如何验证路线以确保帖子归正确的用户名所有?
编辑 - 这是代码:
router.js
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn:function(){
return Meteor.subscribe('posts') && Meteor.subscribe('users');
}
});
Router.map(function() {
this.route('home', {
path: '/',
data:function(){
Session.set('pageView','list');
return Posts.find();
}
});
this.route('singlePost',{
path:'/:username/:_id',
data:function(){
Session.set('pageView','single');
return Posts.findOne(this.params._id);
}
});
});
Router.onBeforeAction('loading');
home.html的
<template name="home">
{{> postsList}}
</template>
posts_list.html
<template name="postsList">
<ul>
{{#each posts}}
{{> postBlock}}
{{/each}}
</ul>
</template>
single_post.html
<template name="singlePost">
{{> postBlock}}
</template>
post_block.html
<template name="postBlock">
{{#if pageView "list"}}
<li>
<a href="{{pathFor 'singlePost'}}">{{title}}</a><br/>
Author: {{username}}
</li>
{{/if}}
{{#if pageView "single"}}
<h1>{{title}}</h1>
<p>{{description}}</p>
<p>Author: {{username}}</p>
{{/if}}
</template>
post_block.js
Template.postBlock.helpers({
username:function(){
var user = getUserInfo(this.owner);
return user.username;
},
pageView:function(type){
return Session.get('pageView') == type;
}
});
functions.js
getUserInfo = function(id){
return Meteor.users.findOne(id);
}
用户名在列表和详细信息视图中正确输出,但我无法获取pathFor链接以包含用户名。
答案 0 :(得分:1)
查看您的模板,您似乎没有在{{pathFor 'singlePost'}}
中传递用户名或ID。
应为{{pathFor 'singlePost' username=username _id=yourId}}
你的路线应该有用。