2013-11-17 2 views
2

Чтобы получить понятные ссылки для обмена, я не хочу ставить только ._id в url, но .name.iron-router: заменить специальные символы

Router.map(function() { 
    this.route('here', { 
     path: 'here/:_id/:name/', 
     template: 'here' 
    }) 
}) 

Проблема в том, что .name запись может иметь специальные символы, такие как /.

www.example.com/here/1234/name_with special-characters like/(<-this slash)/

Есть ли способ заменить косую черту (и другие специальные символы) на железном маршрутизаторе?
(если есть хороший способ справиться с этим, может быть, в некоторых случаях я даже не нужен идентификатор больше.)

Если я хочу использовать <a href="{{pathFor 'showCourse'}}">
Я не могу использовать wildecard path: 'here/:_id/*

Благодаря

+0

Зачем разрешать слэши в именах, которые используются как часть 'url'? Есть ли какая-то конкретная причина, по которой вы это делаете? –

ответ

2

Это не относится к Железному маршрутизатору, но родные глобальные функции encodeURIComponent и decodeURIComponent JavaScript в существующем только для этой цели:

encodeURIComponent("foo/bar"); // returns "foo%2Fbar" 
decodeURIComponent("foo%2Fbar"); // returns "foo/bar" 

Что я делаю в своих проектах: добавьте поле под названием slug и напишите функцию, которая генерирует URL-дружественный пул из заголовка документа и проверяет коллекцию, чтобы убедиться, что слизь уникален (в противном случае он добавляет «-2» "или" -3 "и т. д.). С slug или аналогичным полем, уникальным для каждого документа, вы можете использовать его как единственный параметр запроса и отказаться от _id.

0

Расширение ответа Джеффри Бута, вы можете сделать это с помощью помощника шаблона.

Определения помощника шаблона для кодирования значения name (я сделал его глобальным, поэтому он может быть повторно использован всеми шаблонами):

Template.registerHelper('encodeName', function() { 
    this.name = encodeURIComponent(this.name); 
    return this; 
}); 

Затем в шаблонах, вы можете передать эту функцию железо-маршрутизатор pathFor помощник:

<a href="{{pathFor 'showCourse' encodeName}}"> 

Это работает для меня на Метеоре 1.1.0.2.

Смежные вопросы