有没有办法从Meteor中的模板访问Iron Router参数

时间:2015-08-07 06:24:40

标签: meteor iron-router meteor-helper

我有一个包含参数的路由,我需要从许多不同的模板中访问它。下面是一个路由示例,有几条路径在它更改的_occasionnId参数之后非常相似:

例如:

路线1:/ occasion /:_ occasionId / cards /

路由器2:/ occasion /:_ occasionId / tables /

以下是我对每条路线的完整代码,唯一真正改变的是路径路径和模板。

Router.route('/occasions/:_occasionId/cards/', {
template: 'cards',
data: function(){
//var currentoccasion = this.params._occasionId;
//console.log(currentoccasion);
},subscriptions : function(){
Meteor.subscribe('cards');
Meteor.subscribe('tables');
}
});

我需要将_occasionId参数放入一个模板中,该模板具有导航功能,可以在所有这些页面中输入。我的目标是从路由1开始,您可以转到路由器2.但我无法弄清楚如何在模板中添加正确的URL。

我的模板是:

<template name="occasionnav">
<nav>
  <div class="nav-wrapper">
    <ul class="right hide-on-med-and-down">
      <li><a href="/occasions/:_occasionId/cards/">cards</a></li>
      <li><a href="/occasions/:_occasionnId/tables/">tables</a></li>
    </ul>
  </div>
</nav>
</template>

在&#39; occasionnav&#39;模板由&#34;:_ occasionId&#34;我需要将其与当前正在查看的页面放在同一个参数中。

如果有人对最佳方法有任何见解或建议我会非常感激。

3 个答案:

答案 0 :(得分:2)

如果您想在Meteor应用程序中渲染内部路线,我建议使用{{pathFor}}

您只需设置正确的上下文并为路线命名,例如:

<template name="occasionnav">
   <nav>
      <div class="nav-wrapper">
         <ul class="right hide-on-med-and-down">
            {{#with occasion}}
              <li><a href="{{pathFor route='occasions.cards'}}">cards</a></li>
              <li><a href="{{pathFor route='occasions.tables'}}">tables</a></li>
            {{/with}}
         </ul>
      </div>
   </nav>
</template>
Router.route('/occasions/:_id/cards/', {
    template: 'cards',
    name: 'occasions.cards',
    data: function() {
        return Cards.findOne({_id: this.params._id});
    },
    subscriptions: function() {
        return Meteor.subscribe('cards', this.params._id);
    }
});
Router.route('/occasions/:_id/tables/', {
    template: 'tables',
    name: 'occasions.tables',
    data: function() {
        return Tables.findOne({_id: this.params._id});
    },
    subscriptions: function() {
        return Meteor.subscribe('tables', this.params._id);
    }
});

但是,您也可以通过Router.current().params在模板中获取路由器参数。

答案 1 :(得分:-1)

您可以将_occasionId作为模板助手传递,并以玉石形式呈现:

<li><a href="/occasions/{{_occasionId}}/cards/">cards</a></li>

答案 2 :(得分:-1)

你应该尝试:

Router.route('/occasions/:_occasionId/cards/', function() {
  this.layout("LayoutName");
  this.render("cards", { 
     data: {
        currentoccasion = this.params._occasionId;
     }
  });
});

使用Router.map时,语法不完全相同:

Router.map(function() {
 this.route('<template name>', {
   path: 'path/:_currentoccasion',
   data: function () {
     return {
       currentoccasion: this.params._currentoccasion
     }
   }
});

您可以像模板中那样访问:

Like an helper
{{ currentoccasion }}
Or on the onRendered and onCreated functions
Template.<template name>.onRendered({
  this.data.currentoccasion