Javascript 添加路由器以按个人查看帖子';流星的名字
我是网络开发新手,我正在学习Meteor。我几乎是在遵循《发现流星》这本书,但当我稍微偏离一点时,我会出错 以下代码工作正常,permalink的工作原理与预期的一样: 路由器.jsJavascript 添加路由器以按个人查看帖子';流星的名字,javascript,meteor,iron-router,Javascript,Meteor,Iron Router,我是网络开发新手,我正在学习Meteor。我几乎是在遵循《发现流星》这本书,但当我稍微偏离一点时,我会出错 以下代码工作正常,permalink的工作原理与预期的一样: 路由器.js Router.configure({ layoutTemplate: 'layout', loadingTemplate: 'loading', waitOn: function() {return Meteor.subscribe('allPosts')} }); Router.map(funct
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() {return Meteor.subscribe('allPosts')}
});
Router.map(function() {
this.route('postsList', {path: '/'});
this.route('postPage', {
path: '/posts/:_id',
data: function(){return Posts.findOne(this.params._id)}
});
});
Router.onBeforeAction('loading');
但是,当我将以下内容添加到Router.map时,它无法正常工作:
this.route('byName',{
path: '/posts/:name',
data: function(){return Posts.findOne({name: this.params.name})}
})
为了清楚起见,我将显示我的模板:
<template name = 'byName'>
{{> postItem}}
</template>
<template name = 'postPage'>
{{> postItem}}
</template>
我得到同样的职位。但是当我按名字点击时,我得到
Name: , Post: See Post, By Name
没有填写任何值。我做错了什么?谢谢。尝试向每个路由的数据参数添加
console.log()
语句……如下所示:
this.route('postPage', {
path: '/posts/:_id',
data: function(){
console.log("route -> postPage")
return Posts.findOne(this.params._id)
}
});
this.route('byName',{
path: '/posts/:name',
data: function(){
console.log("route -> byName");
return Posts.findOne({name: this.params.name})
}
});
我想你会看到这个问题的。我真的不确定你想用你的例子实现什么,所以我不确定是否有一个具体的方法来解决你的问题。但是,我将提供一个选项,因此您可以看到以下选项将起作用:
this.route('byName',{
path: '/posts/name/:name',
data: function(){
console.log("route -> byName");
return Posts.findOne({name: this.params.name})
}
});
注意我是如何给它一个不同的匹配路径的吗
在您的示例中,您的路径本质上是相同的(由于参数名的原因,它们看起来不同,但它们都指向/posts/
)。当iron router在路由中运行以正确处理路径时,它会首先遇到与模式匹配的postPage
路由。该路由查找单个Post
,其\u id
等于某个字符串(传递的名称
),结果为空。您可以切换定义路由的顺序(将byName
置于postPage
之上),然后byName
将起作用,另一个将为空
希望有帮助
this.route('postPage', {
path: '/posts/:_id',
data: function(){
console.log("route -> postPage")
return Posts.findOne(this.params._id)
}
});
this.route('byName',{
path: '/posts/:name',
data: function(){
console.log("route -> byName");
return Posts.findOne({name: this.params.name})
}
});
this.route('byName',{
path: '/posts/name/:name',
data: function(){
console.log("route -> byName");
return Posts.findOne({name: this.params.name})
}
});