如何在iron:router中将当前用户的用户名用作路由器参数

时间:2014-10-27 18:22:48

标签: meteor iron-router

我有一个'profile'模板,我将在其中显示与用户相关的内容。所以我想为模板制作路线,但在'path'我想动态插入当前用户的用户名。就我们动态更改关于帖子ID和所有内容的网址的方式而言。 这是目前的路由器代码块。

Router.map(function() {

    this.route('profile', {
        path: '/profile', //here instead of 'profile' I wanna dynamically insert the current user's username.
    });
});

顺便说一句,我能够将用户相关数据加载到所述模板中。 我尝试以试错法的方式将用户名(/username)加载到路径路径,但是徒劳无功。 :(
我想我毕竟不是很好用铁路由器。请帮忙。

4 个答案:

答案 0 :(得分:1)

我也曾在这个问题上苦苦挣扎......然后我遇到了this SO answer。在我的情况下,我做的一切正常,除了没有传递用户名和模板pathFor链接助手。

出于某种原因,在铁路由器路由中使用:_id时,无需在pathFor帮助程序中引用它。这是我困惑的根源,也许是其他人。同样。

以下是在铁路由器的路径中使用用户名的示例代码:

<强> router.js

this.route('/:username', {
    name: "dashboard",
    waitOn: function() {
      return Meteor.subscribe("allUserData");
    },
    data: function() {
      return Meteor.users.findOne();
    }
  });

publications.js

Meteor.publish("allUserData", function() {
  if (this.userId) {
    return Meteor.users.find(this.userId)
  } else {
    this.ready()
  }
})

<强> page.html中

<a href="{{pathFor 'dashboard'  username=username}}"> 
  User Dashboard
</a>

同样,至少在我的特定情况下,我错过了上述username=username

答案 1 :(得分:0)

你试过这个吗?

this.route('profile', {
    path: '/:username',
    data: function() { return Meteor.user().username; }
});

答案 2 :(得分:0)

使用router parameters

Router.map(function() {
  this.route('profile', {
    path: '/:_username', //dynamic parameter username
    data: function() {
      //here you will get the username parameter
      var username = this.params.username;
      return {
        user: Meteor.users.find({ username: username }) //you can use user object in template
      };
    }
  });
});

答案 3 :(得分:0)

不要忘记路线上的waitOn属性。大部分时间只是关闭的时间,为此创建出版物是解决该问题的最佳方式..

服务器端publications.js

Meteor.publish('me', function() {
   if(!this.userId) return false;
   else return Meteor.users.find({_id: this.userId});
});

在您的Router.map()路线之一:

this.route('me', {
    template: 'profile',
    notFoundTemplate: 'profile_not_found', 
    path: '/profile',
    waitOn: function() {
        return Meteor.subscribe("me");
    },
    data: function() {
        return Meteor.user();
    }
});

不要忘记这些配置位:

// Router config.. pretty self explanatory
Router.configure({
    layoutTemplate: 'main',
    notFoundTemplate: 'not_found',
    loadingTemplate: 'loading'
});
// handle the loading screen
Router.onBeforeAction('loading');
// make sure you define routes here that rely on data to throw back
//   404/not found equivalent pages. e.g. no search results found, 
//   or in this case profile not found
Router.onBeforeAction('dataNotFound', {only: ['profile']});

您可以使用个人资料模板:

  <template name="profile">
      Current user Id: {{_id}}
  </template>

  <template name="profile_not_found">
      Profile not found. Are you logged in?
  </template>