流星铁路由器 pathFor 或 helper 中的等价物
Meteor iron router pathFor or equivalent in helper
我只是想在帮助程序中按名称引用 iron 路由器路由,而不是对 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>
但想知道是否有替代/更简洁的方法来做到这一点?如果不是,我可能会恢复使用标签。
首先,
您不需要在html中使用data-id
属性,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
你很幸运,这实际上很简单(尽管文档中尚未明确说明)。
给定路线 item
需要 _id
:
Router.route('/item/:_id', {
name: 'item'
});
实际上有两种选择。选项 1:
Router.go('item', variableWithIdValue)
或者,如果您有一个对象,其成员 variable/function 与路由参数匹配(在本例中为 _id
):
Router.go('item', itemInstance)
在第二种情况下,Iron:Router 注意到传递的参数有一个成员 variable/function 与路由路径中定义的参数匹配,因此它调用它而不是使用传递的参数本身。
编辑:我应该提到你也可以传递一个散列,例如:
Router.go('item', {_id: variableWithIdValue})
这实际上 是 在此处的文档中描述的:
https://github.com/EventedMind/iron-router/blob/devel/Guide.md#named-routes
UI._globalHelpers.pathFor(nameofRoute, param1, parmas2....)
我只是想在帮助程序中按名称引用 iron 路由器路由,而不是对 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>
但想知道是否有替代/更简洁的方法来做到这一点?如果不是,我可能会恢复使用标签。
首先,
您不需要在html中使用data-id
属性,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
你很幸运,这实际上很简单(尽管文档中尚未明确说明)。
给定路线 item
需要 _id
:
Router.route('/item/:_id', {
name: 'item'
});
实际上有两种选择。选项 1:
Router.go('item', variableWithIdValue)
或者,如果您有一个对象,其成员 variable/function 与路由参数匹配(在本例中为 _id
):
Router.go('item', itemInstance)
在第二种情况下,Iron:Router 注意到传递的参数有一个成员 variable/function 与路由路径中定义的参数匹配,因此它调用它而不是使用传递的参数本身。
编辑:我应该提到你也可以传递一个散列,例如:
Router.go('item', {_id: variableWithIdValue})
这实际上 是 在此处的文档中描述的:
https://github.com/EventedMind/iron-router/blob/devel/Guide.md#named-routes
UI._globalHelpers.pathFor(nameofRoute, param1, parmas2....)