Meteor和Iron Router中的渲染模板取决于文档

时间:2015-06-15 20:08:53

标签: meteor iron-router

我正在尝试根据文档中字段的值渲染模板。

我尝试在帮助程序中使用switch case但返回值不正确。

units_list.html

<template name="unitsList">
{{#each units}}
  {{> unitItem}}
{{/each}}
</template>

units_list.js

Template.unitsList.helpers({
  units: function() {
    return Units.find({}, {sort: {name: 1}});
  }
});

unit_item.html

<template name="unitItem">
  <a href="{{unitType}}">{{name}}</a>
</template>

unit_item.js

Template.unitItem.helpers({
  unitType: function() {
    var unitType = this.unitType;
    switch(unitType){
      case 'first': return "{{pathFor 'unitPageFirst'}}";
      case 'second': return "{{pathFor 'unitPageSecond'}}";
    }
  }
});

我要么采取错误的方式,要么缺少基本的东西......

我已经删除了很多代码来专注于这个问题。

有关如何使其发挥作用的任何想法,或有关如何更好地做到这一点的任何建议?

2 个答案:

答案 0 :(得分:1)

您无法在执行时从JS返回未编译的Spacebars字符串。

您可以使用Router.path在模板帮助程序中获取路径的路径:

Template.unitItem.helpers({
  unitType: function() {
    var unitType = this.unitType;
    switch(unitType){
      case 'first':
        return Router.path('unitPageFirst', this);
      case 'second':
        return Router.path('unitPageSecond', this);
    }
  }
});

或者您可以通过声明模板助手来检查unitType来使用普通空格键。

HTML

<template name="unitItem">
  {{#if unitTypeIs 'unitTypeFirst'}}
    <a href="{{pathor 'unitTypeFirst'}}">{{name}}</a>
  {{/if}}
  {{#if unitTypeIs 'unitTypeSecond'}}
    <a href="{{pathor 'unitTypeSecond'}}">{{name}}</a>
  {{/if}}
</template>

JS

Template.unitItem.helpers({
  unitTypeIs: function(unitType){
    return this.unitType == unitType;
  }
});

答案 1 :(得分:0)

查看Iron-router指南中的渲染模板,特别是 this.render('xyz'); 声明

https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#rendering-templates