2015-09-18 39 views
3

铁路由器有点麻烦,并从集合中传入自定义ID。流星铁路由器:自定义ID路由

一些上下文:我有一个“组”的集合,其中他们都有自己的特殊ID,而不是自动生成的默认_id。我试图做出像

路线“本地主机:3000 /组/:GROUPID”

所以每个组将与集团信息自身的渲染模板。

HTML:

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

客户方: 抓住一个GROUPID从会话...... 我测试这和它的作品所以它不是一个问题,与从通话抓住它,而是与路由器

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

这将[R安德路线与组识别符号作为PARAMS而不是实际的数量


UPDATE:

CLIENT

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

这似乎去上班路线但它不会渲染模板中的组名

回答

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,你是不是传递路线名字,而是一个网址。

试试这个:

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

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

这是显示在您导航到/组正在显示的组名一meteorpad/group_a http://meteorpad.com/pad/ cYT4ANBmHyzpHh4c9 /排行榜 – JeremyK

+0

非常感谢 – dpat

0

在从以防任何人有这个问题的答案一个侧面说明,我竟然想通了,有一个在“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}); 
} 
}); 
});