Meteor & Iron:使用数组中的标签作为路径
Meteor & Iron: Using tag from array as path
我正在使用 Iron Router for Meteor,到目前为止我已经设置并运行了这些路由:
Router.map(function () {
this.route('home', {
path: '/',
template: 'home'
});
this.route('userProfile', {
path: '/user/:username',
data: function () {
return Meteor.users.findOne({username: this.params.username})},
template: 'userProfile'
});
this.route('postPage', {
path: '/post/:_id',
data: function () {
return Posts.findOne({_id: this.params._id})},
template: 'postPage'
});
this.route('settings', {
path: '/settings',
template: 'settings'
});
});
我想介绍另一种途径,它会将您带到一个页面,其中的帖子是按标签组织的。例如 http://foo.bar/tag/mexican
会将您带到一个页面,该页面显示数组中具有标签 mexican
的所有帖子。这些帖子像这样存储在集合中:
{
"_id" : "G6xrPYedPzG8KGBTF",
"title" : "Chilli Con Carne",
"rating" : 4,
"tags" : [ "kidneybeans", "mexican", "rice" ],
"description" : "A meaty mexican dish with rice.",
"createdAt" : ISODate("2015-02-15T23:45:12.384Z"),
"owner" : "vh7DjWM9NwbkGSNg9",
"username" : "snowingjack"
}
如您所见,我已经能够创建通过 post._id 传递数据的路由,但现在我不知道如何创建 /tag/:tag
会带我到的路由包含数据的页面是通过标记查询的 posts
集合。我很好 运行 查询只会 return 发布带有特定标签的帖子,例如 return Posts.find({tags: "mexican"});
但我正在努力解决如何传递所有这些数据以获得预期效果的问题。
想法?
P.S。我还有一个模板,我用它来以一种理智的方式吐出标签,包括主题标签、空格、链接等等。我希望能够找到可行的解决方案:
<template name="tagListItem">
<span class="tag-list__item"><a href="{{pathFor 'tagPage'}}">#{{this}}</a></span>
</template>
我认为路线应该是这样的:
this.route('tagPage', {
path: '/tags/:tag',
data: function () {
return Posts.find({tags: this.params.tag)},
template: 'tagPage'
});
你用来输出标签链接的模板中的锚标签可能看起来像这样(虽然我不确定你在 post 中提到的模板的数据上下文):
<a href="/tags/{{this}}">#{{this}}</a>
您必须考虑的另一件事是如何发布和订阅 posts。您可能希望为标签创建一个单独的 pub/sub 关系,这样您发送的 post 带有您不需要的标签。
我正在使用 Iron Router for Meteor,到目前为止我已经设置并运行了这些路由:
Router.map(function () {
this.route('home', {
path: '/',
template: 'home'
});
this.route('userProfile', {
path: '/user/:username',
data: function () {
return Meteor.users.findOne({username: this.params.username})},
template: 'userProfile'
});
this.route('postPage', {
path: '/post/:_id',
data: function () {
return Posts.findOne({_id: this.params._id})},
template: 'postPage'
});
this.route('settings', {
path: '/settings',
template: 'settings'
});
});
我想介绍另一种途径,它会将您带到一个页面,其中的帖子是按标签组织的。例如 http://foo.bar/tag/mexican
会将您带到一个页面,该页面显示数组中具有标签 mexican
的所有帖子。这些帖子像这样存储在集合中:
{
"_id" : "G6xrPYedPzG8KGBTF",
"title" : "Chilli Con Carne",
"rating" : 4,
"tags" : [ "kidneybeans", "mexican", "rice" ],
"description" : "A meaty mexican dish with rice.",
"createdAt" : ISODate("2015-02-15T23:45:12.384Z"),
"owner" : "vh7DjWM9NwbkGSNg9",
"username" : "snowingjack"
}
如您所见,我已经能够创建通过 post._id 传递数据的路由,但现在我不知道如何创建 /tag/:tag
会带我到的路由包含数据的页面是通过标记查询的 posts
集合。我很好 运行 查询只会 return 发布带有特定标签的帖子,例如 return Posts.find({tags: "mexican"});
但我正在努力解决如何传递所有这些数据以获得预期效果的问题。
想法?
P.S。我还有一个模板,我用它来以一种理智的方式吐出标签,包括主题标签、空格、链接等等。我希望能够找到可行的解决方案:
<template name="tagListItem">
<span class="tag-list__item"><a href="{{pathFor 'tagPage'}}">#{{this}}</a></span>
</template>
我认为路线应该是这样的:
this.route('tagPage', {
path: '/tags/:tag',
data: function () {
return Posts.find({tags: this.params.tag)},
template: 'tagPage'
});
你用来输出标签链接的模板中的锚标签可能看起来像这样(虽然我不确定你在 post 中提到的模板的数据上下文):
<a href="/tags/{{this}}">#{{this}}</a>
您必须考虑的另一件事是如何发布和订阅 posts。您可能希望为标签创建一个单独的 pub/sub 关系,这样您发送的 post 带有您不需要的标签。