如何将参数传递给使用Meteorite的Iron-Router Handlebars中的pathFor?

Che*_*het 29 handlebars.js meteor meteorite iron-router

我有一个带参数的简单路线:

this.route('article', {
        path: '/article/:_id',
        data: function() { return Articles.findOne(this.params._id); }
    });
Run Code Online (Sandbox Code Playgroud)

我想在这里使用带有_id的pathFor把手助手:

{{#each articles}}
<li><a href="{{pathFor 'article' _id}}">{{title}}</a></li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

这不适用于将_id标记传递到url中...

Che*_*het 61

<li><a href="{{pathFor 'article' _id=this._id }}">{{title}}</a></li>
Run Code Online (Sandbox Code Playgroud)

这就是你传递参数的方式

  • 不,这会创建`/ article/abcd /?_ id = abcd`. (4认同)
  • 注意:这已经改变了一点.您现在需要使用'query' - 参数https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#pathfor (2认同)
  • 附加说明:如果要使用动态查询参数,可以在GitHub中使用本期中提出的帮助程序https://github.com/iron-meteor/iron-router/issues/589 (2认同)

cma*_*her 13

在您的示例中,您不需要传递任何参数.该pathFor助手将自动使用当前数据上下文,并抓住来自该对象的属性.由于您有一个{{#each articles}}迭代器,因此当前数据上下文pathFor将设置为列表中的当前项(文章).文章对象应该有一个_id属性,因此路径助手将起作用.如果要更改数据上下文,可以将另一个对象作为第一个参数传递给pathFor帮助程序,或者可以使用{{#with anotherDataContextObject}}块帮助程序.

在v0.5.4中,您还可以使用Handlebars哈希键值来替换上下文对象.在开发分支中,这不再是真实的.如果在Handlebars帮助程序中提供键值对作为参数,那么它们将附加到查询字符串.这里举例说明dev分支的变化示例:

{{pathFor 'article' article q=some+query}}
//=> "/article/abcd/?q=some+query
Run Code Online (Sandbox Code Playgroud)

要么

{{#with article}}
{{pathFor 'article' q=some+query}}
//=> "/article/abcd/?q=some+query
{{/with}}
Run Code Online (Sandbox Code Playgroud)