Ответ 1
<li><a href="{{pathFor 'article' _id=this._id }}">{{title}}</a></li>
Вот как вы передаете параметр
У меня есть простой маршрут с параметром:
this.route('article', {
path: '/article/:_id',
data: function() { return Articles.findOne(this.params._id); }
});
Я хотел бы использовать помощник handlefor handleFor здесь с помощью _id:
{{#each articles}}
<li><a href="{{pathFor 'article' _id}}">{{title}}</a></li>
{{/each}}
Это не работает для передачи тега _id в url, хотя...
<li><a href="{{pathFor 'article' _id=this._id }}">{{title}}</a></li>
Вот как вы передаете параметр
В вашем примере вам не нужно передавать какие-либо параметры. Помощник pathFor
автоматически использует текущий контекст данных и захватывает свойство из этого объекта. Поскольку у вас есть итератор {{#each articles}}
, текущий контекст данных для pathFor
будет установлен на текущий элемент в списке (статья). Объект статьи должен иметь свойство _id
, поэтому помощник пути будет работать. Если вы хотите изменить контекст данных, вы можете передать другой объект в качестве первого параметра помощнику pathFor
, или вы можете использовать вспомогательный блок {{#with anotherDataContextObject}}
.
В v0.5.4 вы также можете использовать значения хеш-ключей Handlebars для замены объекта контекста. В ветке dev это уже не так. Если вы укажете пары ключевых значений в качестве параметров в вашем помощнике Handlebars, они будут добавлены к строке запроса. Чтобы проиллюстрировать здесь пример изменения ветки dev:
{{pathFor 'article' article q=some+query}}
//=> "/article/abcd/?q=some+query
Или
{{#with article}}
{{pathFor 'article' q=some+query}}
//=> "/article/abcd/?q=some+query
{{/with}}
В Meteor 1.3.X я использую опции для помощника pathFor.
{{pathFor route = '' data = query = '' hash = ''}}