流星铁路由器 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....)