我想用铁路由器制作一条路线,但出于某种原因,它根本没有渲染任何东西。
<a target='_blank' href='/strategy?_id=" + strategyId + "'>Details</a>
...我的Router.map函数有:
this.route('strategy', {
path: 'strategy',
data: function(){
return Strategies.findOne(this.params._id);
},
action:function(){
this.render();
}
});
该链接显然正确链接到
http://localhost:3000/strategy?_id=jShHwfv4fM7oxnrg2
..但由于某种原因,它根本没有呈现任何内容(结果模板为空)。
另外,我试过这个:
<a target='_blank' href='" + Router.route('strategy', {_id: strategyId}) + "'>Details</a>
...但实际上是立即执行路线。我想要的只是渲染链接。 我在这里错过了什么?
编辑以下第一个答案: 我知道pathFor但是(也许我的解释并不清楚) - 你在上面看到的锚码是JS函数(file.js),我不是在谈论一个html文件,我可以很容易地使用pathFor。此锚点在JS函数中动态生成。我不能在js函数afaik中使用把手代码
答案 0 :(得分:3)
要在模板中呈现路线网址,您应该使用pathFor
:
<template name="strategy">
{{#with strategy}}
<a href={{pathFor 'strategy'}} target="_blank">Details</a>
{{/with}}
</template>
pathFor
将路由名称作为参数,并使用当前数据上下文呈现URL,您应将其设置为URL所依赖的文档。
您的路线定义已损坏,它应如下所示:
this.route("strategy",{
// specify the strategy _id as an URL component instead of query parameter
path:"/strategy/:_id",
data: function(){
// this.params._id lookups for URL components, not query params
var strategy=Strategies.findOne(this.params._id);
return {
strategy:strategy
};
}
});
为路由准确构建路径非常重要:它们始终以/
开头,并且可以使用以下语法包含命名参数::parameterName
,这些参数可以使用{{1在路由函数中检索}}
编辑:
要在JS中获取正确的路径,请使用this.params.parameterName
,这是Router.path
正在使用的路径:
pathFor
您需要使用三重括号表示法渲染锚点。
Template.strategy.helpers({
anchor:function(strategy){
var href = Router.path("strategy",strategy);
return "<a href='"+href+"'>Link</a>";
}
});