流星铁路由器路径或等效于助手

时间:2015-02-05 12:21:06

标签: meteor iron-router

我只是想在帮助器中按名称引用铁路由器路由,而不是硬编码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>

但是想知道是否有其他/更简洁的方法可以做到这一点?如果不是,我可能会恢复使用标签。

3 个答案:

答案 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