有谁知道我如何使用 Meteor 和 Iron Router 从当前 url 中提取 id?

Does anyone have any idea how I might extract an id from the current url with Meteor and Iron Router?

我正在尝试根据 URL 中包含的 ID 从数据库中加载一组项目。这样我就可以与其他人分享 link,他们仍然可以看到他们应该看到的内容。也许这是错误的做法?!任何帮助,将不胜感激。

有很多方法可以做到这一点。在不知道您的 URL 结构的情况下,我假设它类似于 http://myapp.com/page/[ID],其中 [ID] 是相关 ID。在这种情况下,您的 Iron Router 路由将如下所示:

Router.route('/page/:_id', {
  name: 'page'
});

如果是这种情况,并且假设您没有任何数据要传递到页面,您可以通过调用 Router.current().params._id 直接从客户端访问 ID,例如在模板帮助程序中:

Template.myTemplate.helpers({
  currentId: function() { return Router.current().params._id; }
});

或者,路由器可以访问路由参数,因此您可以在路由函数中将 ID 作为数据传递:

Router.route('/page/:_id', {
  name: 'page',
  data: function() { return {_id: this.params._id; }
});

然后该数据作为模板的数据上下文传入,因此您可以像这样直接在模板中访问它:

<template name='myTemplate'>
  The current ID is {{_id}}
</template>

最后,假设您实际上是从数据库中提取某些内容并将其用作您的数据上下文,您也可以直接在模板中访问它。在这里,我假设你有一个名为 "Pages" 的集合,你想从中提取:

Router.route('/page/:_id', {
  name: 'page',
  waitOn: function() { return Meteor.subscribe('page', this.params._id); }
  data: function() { return Pages.findOne({_id: this.params._id});
});

然后您可以像以前一样直接在模板中访问它:

<template name='myTemplate'>
  The current ID is {{_id}}
</template>

有关使用 Iron Router 进行路由的更多信息,建议您查看 Iron Router Guide