Параметры pathFor больше не работают после обновления Blaze

Я обновил метеор 0.7 до 0.8, железный роутер 0.6.2 до 0.7.0 и добавил blaze-layout 0.2.2.

Раньше у меня был путь для работы с двумя параметрами. В разобранном виде до основных частей это выглядело так:

{{#each users}}                                                                                                                                                                          
   <a href="{{pathFor 'template' _id=this._id fooParam=foo}}">link text</a>
{{/each}}

После обновления pathFor возвращает только URL-адрес шаблона, с параметрами ничего не делается. Я также могу отображать переменные, и все отображается правильно:

{{#each users}}
   {{this._id}} {{!displayed correctly in browser}}  
   {{foo}}      {{!displayed correctly in browser}}                                                                                                                            
   <a href="{{pathFor 'template' _id=this._id foo_param=foo}}">link text</a>
{{/each}}

Результат не изменится, если я просто попытаюсь использовать контекст данных с установленным _id:

{{#each users}}                                                                                                                            
   <a href="{{pathFor 'template'}}">link text</a>
{{/each}}

Благодарим за любую идею!


person Shwaydogg    schedule 03.04.2014    source источник


Ответы (2)


Из History.md в iron-router репозитории:

{{pathFor}} и {{urlFor}} по-прежнему работают с некоторыми изменениями API:

  • {{pathFor 'routeName' params=this query="key=value&key2=value2" hash="somehash" otherparam="anothervalue"}}
  • то же самое для {{urlFor}}

Из комментариев, найденных в коде (строки 41-47):

 /**
 * Example Use:
 *
 *  {{pathFor 'items' params=this}}
 *  {{pathFor 'items' id=5 query="view=all" hash="somehash"}}
 *  {{pathFor route='items' id=5 query="view=all" hash="somehash"}}
 */

Другими словами, ваш помощник pathFor должен выглядеть следующим образом:

<a href="{{pathFor 'template' _id=this._id query="foo_param=foo"}}">link text</a>

Надеюсь, это поможет.

person fletch    schedule 04.04.2014

Флетч прав в том, что вчера я исправил то же самое. См. https://github.com/EventedMind/iron-router/issues/580#issuecomment-39526280.

Для каждого pathFor я получал следующую ошибку в консоли браузера:

Exception in Meteor UI: TypeError: Cannot read property 'params' of undefined
at Object.processPathArgs (http://localhost:3000/packages/iron-router.js?a4167ac4d12a73891d8a9b8c57419a347da0ee12:2200:22)
at Object._.extend.pathFor (http://localhost:3000/packages/iron-router.js?a4167ac4d12a73891d8a9b8c57419a347da0ee12:2227:34)
at http://localhost:3000/packages/ui.js?b523ef986d3d39671bcb40319d0df8982acacfe8:2838:23
at Spacebars.call (http://localhost:3000/packages/spacebars.js?5d478ab1c940b6f5a88f78b8adc81a47f022da77:173:18)
at Spacebars.mustacheImpl (http://localhost:3000/packages/spacebars.js?5d478ab1c940b6f5a88f78b8adc81a47f022da77:110:25)
at Object.Spacebars.mustache (http://localhost:3000/packages/spacebars.js?5d478ab1c940b6f5a88f78b8adc81a47f022da77:114:39)
at HTML.A.href (http://localhost:3000/client/views/prayers/template.prayer_item.js?e15ce9378850d2ce553c8c60647642a543534557:58:30)
at http://localhost:3000/packages/htmljs.js?697b0dd0fbdd1f8984dffa3225121a9b7d0b8609:254:14
at callWithNoYieldsAllowed (http://localhost:3000/packages/deps.js?7afb832ce6e6c89421fa70dc066201f16f9b9105:74:5)
at _.extend._compute (http://localhost:3000/packages/deps.js?7afb832ce6e6c89421fa70dc066201f16f9b9105:212:7) 

Я просто изменил различные {{pathFor 'items' this}} на {{pathFor 'items' params=this}}

person m2web    schedule 04.04.2014
comment
Спасибо м2веб. Пока я вижу, что с помощью {{pathFor 'template' params=Text }} -> http://..template/?Text . Раньше в параметрах можно было указать переменные, они больше не оцениваются. - person Shwaydogg; 04.04.2014
comment
Могу ли я попробовать ваши изменения в ветке? - person Shwaydogg; 04.04.2014
comment
Shwaydogg, репозиторий — github.com/m2web/m2smgrpdaily. Обратите внимание на router.js на github.com/m2web/m2smgrpdaily/blob/master/client/helpers/router.js, а также на github.com/m2web/m2smgrpdaily/blob/master/client/views/prayers/ - person m2web; 05.04.2014