在javascript中用铁路由器动态添加路由

时间:2014-10-20 21:47:28

标签: javascript meteor iron-router

我想用铁路由器制作一条路线,但出于某种原因,它根本没有渲染任何东西。

<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中使用把手代码

1 个答案:

答案 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>";
  }
});