流星铁路由器:自定义ID路由

时间:2015-09-18 01:57:02

标签: javascript meteor iron-router

在铁路由器上遇到一些麻烦并从集合中传入自定义ID。

某些上下文:我有一组“组”,除了自动生成的默认_id之外,它们都有自己的特殊ID。我正在尝试制作类似

的路线

“localhost:3000 / groups /:groupid”

所以每个组都有自己的渲染模板和组信息。

HTML:

<template name="Group">
<h1>Group: {{groupName}}</h1>
</template>

客户方: 从会话中抓取一个groupid ...... 我测试了这个并且它可以工作,所以它不是从会话中抓取它而是使用路由器

的问题
var groupid = Session.get('groupID');
Router.go('/groups/:_id',{_id: groupid})

ROUTER:

Router.route('/groups/:_id', function () {
this.render('Group', {
data: function () {
  return GroupsList.findOne({_id: this.params._id});
}
});
});

这将呈现一个路径,其中groupid为params而不是实际数字

更新:

客户端

Router.go('/groups/'+ groupid);

ROUTER

Router.route('/groups/:groupid', function () {
  this.render('Group', {
    data: function () {
      console.log(this.params.groupid)
      console.log(GroupsList.findOne({groupID: this.params.groupid}))
      return GroupsList.findOne({groupID: this.params.groupid});
    }
  });
});

这似乎让路线起作用,但它不会在模板中呈现组名

2 个答案:

答案 0 :(得分:1)

来自Iron Router Guide

Now that we're using named routes in Router.go you can also pass a
parameters object, query and hash fragment options.

Router.go('post.show', {_id: 1}, {query: 'q=s', hash: 'hashFrag'});

但是,当您调用Router.go时,您没有传递路由名称,而是传递URL。

试试这个:

Router.go('/groups/' + groupid);

Router.route('/groups/:_id', function () {
  this.render('Group', {
    data: function () {
      return GroupsList.findOne({groupid: this.params._id});
    }
  });
});

答案 1 :(得分:0)

在答案的旁注中,以防其他人遇到此问题,我实际上发现&#34; this.params._id&#34;的数据类型存在问题。 ,它似乎是一个不是字符串或数字的数据类型,因此无法在findOne方法中成功使用。最后我只需要parseInt,这就是最后的解决方案:

Router.go('/groups/'+ groupid);

Router.route('/groups/:groupid', function () {
this.render('Group', {
data: function () {
  var id = parseInt(this.params.groupid)
  return GroupsList.findOne({groupID: id});
}
});
});