【问题标题】:Generating a URL for Twitter users with Iron Router使用 Iron Router 为 Twitter 用户生成 URL
【发布时间】:2014-02-15 02:42:30
【问题描述】:

我有一些用户使用 Twitter 登录 Meteor 应用程序。我想使用 Iron Router 为他们创建一个个人资料页面路由,引用他们的 Twitter 屏幕名称。

我不知道应该用什么替换下面 Iron Router 代码的 :slug 部分(我的 user 文档中没有属性 slug)。

this.route('expertPage', {
path: '/profile/:slug',
data: function() { return Meteor.users.findOne({"services.twitter.screenName": this.params.slug}); }
});

【问题讨论】:

  • 这并不是说您的用户文档上应该有一个slug 属性。意思是找到services.twitter.screenName 属性等同于URL 中提供的slug 参数的用户文档。 “Slug”只是一个术语,意思是 URL 友好的关键字,即一些只包含字母、数字、连字符和下划线的字符串。
  • @Cuberto 是的,抱歉,我应该更清楚一点——slug 是我自己选择的词。也可以是banana 或任何随机的。将浏览器指向localhost:3000/profile/cavill 有效,但我希望能够在我的模板中使用{{pathFor 'userProfile'}}(我目前不能)。
  • 啊,也许你可以做{{#with slug}}{{pathFor "userProfile"}}{{/with}},然后添加一个像Template.someTemplate.slug = function() { return {slug: this.user.services.twitter.screenName}; };这样的助手

标签: javascript meteor iron-router


【解决方案1】:

首先,您必须将 slug 作为键值对提供,即模板助手中的对象:

userScreenName = function() {
  return Meteor.user().services.twitter.screenName;
}

Template.profileLink.helpers({
  slugObject: function () {
    return {'slug': userScreenName()};
  },
  screenName: function () {
    return userScreenName();
  }
});

您现在可以通过使用将其提供给 pathFor 助手

a) 带有with

<template name="profileLink">
  <a href="{{#with slugObject}}{{pathFor 'userProfile'}}{{/with}}">{{screenName}}</a>
</template>

b) 直接用作参数

<template name="profileLink">
  <a href="{{pathFor 'userProfile' slugObject}}">{{screenName}}</a>
</template>

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2015-07-26
    • 1970-01-01
    • 2017-06-17
    • 2014-06-01
    • 1970-01-01
    • 2022-07-04
    • 2016-02-27
    • 2016-10-31
    相关资源
    最近更新 更多