使用arg

时间:2015-08-10 06:23:13

标签: meteor iron-router

Iron Router / Meteor示例似乎都在命名路由中使用_id,这有效。但是,我错过了一些东西,以便使用_id以外的集合中另一个键的命名路由。具体来说,我使用的是tag密钥。

'/ tags'route

此标记列表路由按预期工作:http://localhost:3000/tags

Router.route('/tags', {
  name: 'demoTagsList',
  waitOn: function() {
    return Meteor.subscribe('tags');
  },
  data: function() {
     return Tags.find();
   }
});

pathFor的{​​{1}}按预期工作

demoTagItem

<a href="{{pathFor 'demoTagsList'}}">Tags</a> 一样 - &gt; Router.routes['demoTagsList'].url()

'/ tags /:_ tag'route

此特定标记路由也按预期工作,并返回相应的数据:http://localhost:3000/tags

"http://localhost:3000/tags/foo-tag"

但是,每个Router.route('/tags/:_tag', { name: 'demoTagItem', waitOn: function() { return Meteor.subscribe('itemsFromTag', this.params._tag); }, data: function() { return Posts.find({tags: this.params._tag}); } }); 路由的pathFor会产生demoTagItemnull - &gt; “http://localhost:3000null

模板代码:

Router.routes['demoTagItem'].url()

设置路由器路径以便<template name="demoTagsList"> <h2>Demo Tag list</h2> <ul> {{#each tags}} <li class="tag"><a href="{{pathFor 'demoTagItem'}}">#{{name}}</a></li> {{/each}} </ul> </template> 选择pathFor并将链接构建为{{name}}需要做些什么?

1 个答案:

答案 0 :(得分:1)

如果查看pathFor docs,您会看到该函数需要data上下文来填写路径中的参数。您可以使用模板助手显式设置data,如下所示:

<li class="tag"><a href="{{pathFor 'demoTagItem' data=getTag}}">#{{name}}</a></li>

其中getTag是一个模板助手,它返回一个像{_tag: 'puppies'}这样的对象。

但是,阻力最小的路径通常是将路径参数设置为与标记对象本身具有相同的字段名称。假设您的代码具有name属性,您可以像这样修改您的路线:

Router.route('/tags/:name', {
  name: 'demoTagItem',
  waitOn: function() {
    return Meteor.subscribe('itemsFromTag', this.params.name);
  },
  data: function() { return Posts.find({tags: this.params.name}); }
});

现在,您的模板不需要对原始代码进行任何修改,因为上下文已经是标记。这相当于写data=this this看起来像{name: 'puppies'}