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 带有您不需要的标签。