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