iron-router: замени специални знаци

За да получа разбираеми връзки за споделяне, не искам да поставям само ._id в URL адреса, но и .name.

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) /

Има ли начин да заменя наклонената черта (и други специални знаци) в iron-router?
(ако има добър начин да се справя с това, може би в някои случаи дори вече нямам нужда от идентификатора.)

Ако искам да използвам <a href="/bg{{pathFor 'showCourse'}}">
не мога да използвам wildecardpath: 'here/:_id/*

Благодаря


person 1u-    schedule 17.11.2013    source източник
comment
Защо някой би позволил наклонени черти в имена, които се използват като части от url? Има ли някаква конкретна причина да го направите?   -  person Tomasz Lenarcik    schedule 19.11.2013


Отговори (2)


Не е специфично за Iron Router, но собствените глобални функции на JavaScript encodeURIComponent и decodeURIComponent съществуват само за тази цел:

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

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

person Geoffrey Booth    schedule 17.11.2013

Разширявайки отговора на Джефри Бут, можете да направите това с помощта на шаблон.

Дефинирайте помощен шаблон за кодиране на вашата name стойност (направих го глобален, така че да може да се използва повторно от всички шаблони):

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

След това във вашите шаблони можете да предадете тази функция на помощника pathFor на iron-router:

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

Това работи за мен на Meteor 1.1.0.2.

person imiric    schedule 10.04.2015