有没有人知道如何从Meteor和Iron Router中提取当前网址的ID?

时间:2015-03-27 15:02:24

标签: meteor iron-router

我试图根据URL中包含的ID从数据库加载一组项目。这样我可以与其他人分享链接,他们仍然可以看到他们应该是什么。也许这是错误的方式去做什么?!任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。在不知道您的网址结构的情况下,我会假设它类似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作为Route函数中的数据传递:

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