Meteor 铁路由器:替换特殊字符
为了获得可理解的链接来共享,我不想在url中只放Meteor 铁路由器:替换特殊字符,meteor,meteorite,iron-router,Meteor,Meteorite,Iron Router,为了获得可理解的链接来共享,我不想在url中只放\u id,还要放.name Router.map(function () { this.route('here', { path: 'here/:_id/:name/', template: 'here' }) }) 问题是.name条目可能有特殊字符,如/ www.example.com/here/1234/name_with special-characters like / (<-t
\u id
,还要放.name
Router.map(function () {
this.route('here', {
path: 'here/:_id/:name/',
template: 'here'
})
})
问题是.name
条目可能有特殊字符,如/
www.example.com/here/1234/name_with special-characters like / (<-this slash) /
www.example.com/here/1234/name_带有特殊字符,如/(这不是Iron Router特有的,但是JavaScript的本地全局函数encodeURIComponent
和decodUriComponent
正是为了这个目的而存在的:
encodeURIComponent("foo/bar"); // returns "foo%2Fbar"
decodeURIComponent("foo%2Fbar"); // returns "foo/bar"
在我的项目中,我要做的是添加一个名为slug
的字段,并编写一个函数,从文档标题生成一个URL友好的slug,并检查集合以确保slug是唯一的(否则它会根据需要附加“-2”或“-3”等)。使用每个文档唯一的slug
或类似字段,您可以将其用作唯一的查询参数,并放弃在Geoffrey Booth的答案上展开\u id
,您可以使用模板帮助器进行此操作
定义一个模板帮助器来编码您的名称
值(我将其设置为全局,以便所有模板都可以重用):
Template.registerHelper('encodeName',function(){
this.name=encodeURIComponent(this.name);
归还这个;
});
然后,在模板中,您可以将此函数传递给iron router的pathFor
helper:
这对我来说在Meteor 1.1.0.2上很有效。为什么允许在用作url
一部分的名称中使用斜杠?您这样做有什么具体原因吗?