Iron Router / Meteor - 使用URL中的用户名发布详细信息

时间:2014-04-17 04:10:23

标签: meteor iron-router

我对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链接以包含用户名。

1 个答案:

答案 0 :(得分:1)

查看您的模板,您似乎没有在{{pathFor 'singlePost'}}中传递用户名或ID。

应为{{pathFor 'singlePost' username=username _id=yourId}}

你的路线应该有用。