Вот довольно стандартный способ установить маршрут в железном маршрутизаторе:Зачем мне нужно называть динамический маршрут «: _id» и не все, что я хочу?
Router.route('/posts/:_id', {
name: 'postPage',
data: function() { return Posts.findOne({_id: this.params._id}) }
});
Экспериментировать вокруг немного, новичка, как я, я попробовал:
Router.route('/posts/:whatever', {
name: 'postPage',
data: function() { return Posts.findOne({_id: this.params.whatever}) }
});
Это хорошо работает, вплоть до точки , Правда, whatever
будет зачерпывать все, что после /posts/
в качестве значения, и контекст данных действительно будет таким же, как раньше ... но привязка к конкретным сообщениям теперь не будет работать!
Так,
<a href="{{pathFor 'postPage'}}">{{title}}</a>
просто не будет работать, делая это "мой" способ (ссылки на вообще ничего).
Я не могу полностью обернуть голову вокруг этого, и я слишком много начинаю, чтобы понять исходный код для Iron Router, поэтому я надеюсь, что кто-то здесь может объяснить это так, что даже новичок как я могу понять.
Предпочтительно нравится что-то вроде этого:
Первый
{{pathFor 'postPage'
}} выглядит внутри маршрутов, чтобы найти один названныйpostPage
.Он видит, что этот маршрут соответствует
/posts/
, а затем что-то еще.Заглядывая в контекст данных, он обнаруживает, что возвращается только одно сообщение, а именно то же самое с
_id
, как и все, что приходит после/posts/
.Он понимает, что он должен ссылаться на это сообщение, умело устанавливая URL-адрес на
/posts/_id
.
Это неправильно, скорее всего, и это не объясняет, почему она будет работать, когда whatever
превращается в _id
. Но это очень помогло бы мне увидеть, как он разбирается подобным образом.
Редактировать: Очистить мой вопрос, чтобы его было легче понять.
Похоже, что Meteor установил соглашение о названии свойства '_id', которое, по-видимому, не может быть переопределено. См. Http://en.wikipedia.org/wiki/Convention_over_configuration –