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

Meteor Iron Router : custom id route

本文关键字:id 路由 自定义 路由器 流星      更新时间:2023-09-26

在使用iron router和从集合中传入自定义id时遇到了点麻烦。

一些上下文:我有一个"组"集合,其中它们都有自己的特殊id,而不是自动生成的默认_id。我想创建一条像

这样的路径

" localhost:3000/groups/:groupid "

,所以每个组将有自己的渲染模板与组的信息。

HTML:

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

CLIENTSIDE:从会话中抓取组…我测试了这个,它可以工作,所以它不是从会话中抓取它的问题,而是与路由器

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

路由器:

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

这将呈现一个以groupid作为参数而不是实际编号的路由


更新:

客户

Router.go('/groups/'+ groupid);
路由器

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});
    }
  });
});

这似乎使路由工作,但它不会在模板中呈现组名

From the 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。注意,你传递的不是路由名,而是url。

试试这个:

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

在回答的旁注中,以防其他人有这个问题,我实际上发现"this.params"的数据类型存在问题。_id",它似乎是作为一个数据类型,不是一个字符串或数字,因此不能成功地在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});
}
});
});