Создание URL-адреса для пользователей Twitter с помощью Iron Router

У меня есть пользователи, которые входят в приложение Meteor через Twitter. Я хотел бы создать для них маршрут страницы профиля с помощью Iron Router, который ссылается на их имя экрана Twitter.

Я не могу понять, что должно заменить часть :slug кода Iron Router ниже (в моем документе user нет свойства slug).

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

person cavill    schedule 14.02.2014    source источник
comment
Это не говорит о том, что в вашем пользовательском документе должно быть свойство slug. Это говорит о том, что нужно найти пользовательский документ, свойство services.twitter.screenName которого эквивалентно параметру slug, указанному в URL-адресе. Slug — это просто термин, означающий ключевое слово, удобное для URL, то есть некоторая строка, которая содержит только буквы, цифры, дефисы и символы подчеркивания.   -  person sbking    schedule 14.02.2014
comment
@Cuberto да, извините, я должен был быть яснее - slug это мой собственный выбор слова. С таким же успехом может быть banana или что-нибудь случайное. Указание браузеру на localhost:3000/profile/cavill работает, но я хочу иметь возможность использовать {{pathFor 'userProfile'}} в своих шаблонах (чего я сейчас не могу).   -  person cavill    schedule 14.02.2014
comment
Ах, возможно, вы могли бы сделать {{#with slug}}{{pathFor "userProfile"}}{{/with}}, а затем добавить помощника, такого как Template.someTemplate.slug = function() { return {slug: this.user.services.twitter.screenName}; };   -  person sbking    schedule 14.02.2014


Ответы (1)


Сначала вы должны предоставить слаг как пару ключ-значение, объект в помощнике шаблона:

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

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

Теперь вы можете передать это помощнику pathFor, используя

а) с блоком with

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

б) с прямым использованием в качестве аргумента

<template name="profileLink">
  <a href="{{pathFor 'userProfile' slugObject}}">{{screenName}}</a>
</template>
person Serkan Durusoy    schedule 14.02.2014