我只是想在帮助器中按名称引用铁路由器路由,而不是硬编码URL。因此,当用户单击某个按钮时,它们将被重定向到具有该按钮的data-id属性的id的项目路径。
items.html
<button class="btn btn-default btn-xs pull-right" data-id={{_id}}>View</button>
items.js
Template.items.events({
'click button': function(e) {
// This works but is hard coding the path
Router.go("/item/" + ($(e.currentTarget).data('id')));
// This doesn't work but is there an alternative method of doing this
Router.go(pathFor('item' id=_id))
}
});
router.js
Router.route('/item/:_id', {
name: 'item'
});
我当然可以在这样的模板中使用pathFor:
<a href="{{pathFor 'item' id=_id}}">View</a>
或指定数据属性:
<button class="btn btn-default btn-xs pull-right" data-path={{pathFor 'item' id=_id}}>View</button>
但是想知道是否有其他/更简洁的方法可以做到这一点?如果不是,我可能会恢复使用标签。
答案 0 :(得分:5)
UI._globalHelpers.pathFor(nameofRoute, param1, parmas2....)
答案 1 :(得分:2)
首先,
您不需要在html中使用data-id
attrib,this._id将在点击事件中提供
其次,对于Router.go
,您可以使用Router.go("item",{_id:this._id});
的代码强>
Template.items.events({
'click button': function(e) {
Router.go("item",{_id:this._id});
}
});
请参阅此处的文档:https://github.com/EventedMind/iron-router/blob/devel/Guide.md#named-routes
答案 2 :(得分:2)
你很幸运,这实际上很简单(虽然在文档中尚未明确说明)。
鉴于路由item
需要_id
:
Router.route('/item/:_id', {
name: 'item'
});
实际上有两种选择。选项1:
Router.go('item', variableWithIdValue)
或者,如果您的对象的成员变量/函数与路由的参数匹配(在本例中为_id
):
Router.go('item', itemInstance)
在第二种情况下,Iron:Router注意到传递的参数具有与路径路径中定义的参数匹配的成员变量/函数,因此它调用它而不是使用传递的参数本身。
编辑:我应该提一下你也可以传递哈希,例如:
Router.go('item', {_id: variableWithIdValue})
这里的文档中描述了 :
https://github.com/EventedMind/iron-router/blob/devel/Guide.md#named-routes