有没有办法在Meteor中将参数传递给Handlebar模板?

有没有办法在Meteor中将参数传递给Handlebar模板?,meteor,handlebars.js,Meteor,Handlebars.js,我正在使用Meteor 0.5.2,并试图解决我认为显而易见的模式,应该有一个简单的解决方案 我有一个模板,它应该在每个模板实例中返回不同的数据块 例如,我有一个显示电视节目的模板-逐节目播放 然后我需要用不同的数据显示同一模板的两个实例——一个是过去的节目,另一个是未来的节目 所以我有一个电视节目模板: <template name="tv_program"> {{#each shows}} ... </template> 将参数传递给tv_程序模板实例,

我正在使用Meteor 0.5.2,并试图解决我认为显而易见的模式,应该有一个简单的解决方案

我有一个模板,它应该在每个模板实例中返回不同的数据块

例如,我有一个显示电视节目的模板-逐节目播放

然后我需要用不同的数据显示同一模板的两个实例——一个是过去的节目,另一个是未来的节目

所以我有一个电视节目模板:

<template name="tv_program">
   {{#each shows}}
   ...
</template>
将参数传递给tv_程序模板实例,我可以从JavaScript读取该实例并调整mongo查询

目前,我已经复制/粘贴了我的模板/js代码,并调整了mongo查询,但必须有更好的方法

我研究了带有参数的partials/helpers,但这似乎不是我问题的解决方案


谢谢,弗拉基米尔,你处理问题的层次不对。与其试图告诉代码从模板中做什么,不如告诉模板从代码中做什么。例如:

Template.past_shows.shows = function() { return shows(-1); }

Template.upcoming_shows.shows = function() { return shows(1); }

function shows(order) {
  return Shows.find({}, {$sort: order});
}

<template name="past_shows">
  {{#each shows}}
    {{> show}}
  {{/each}}
</template>

<template name="upcoming_shows">
  {{#each shows}}
    {{> show}}
  {{/each}}
</template>

<template name="show">
  <li>{{_id}}: {{name}}</li>
</template>
Template.pass_shows.shows=function(){return shows(-1);}
Template.uncoming_shows.shows=function(){return shows(1);}
功能显示(顺序){
返回Shows.find({},{$sort:order});
}
{{{#每个显示}
{{>show}
{{/每个}}
{{{#每个显示}
{{>show}
{{/每个}}
  • {{{u id}}:{{name}

  • 如果您的应用程序使用状态机,例如,您可以使用一个模板,并根据应用程序状态将即将或过去的节目填充到该模板中。

    感谢您向我指出这个方向。我按照你的建议重构了我的代码。完成后,剩下的HTML代码块在我的两个模板中都是相同的(在示例中,过去的、未来的模板应该是相同的,并且真实的模板代码与图像和用户相关数据非常复杂)。我想这没关系,因为在我的视图中有冗余的相同代码比在“controller/model”JavaScript中更好。你能把重复的代码移到
    show
    模板中吗?实际上我能做到。我的实际代码与我在问题中使用的简单示例不同。谢谢,迪恩。
    Template.past_shows.shows = function() { return shows(-1); }
    
    Template.upcoming_shows.shows = function() { return shows(1); }
    
    function shows(order) {
      return Shows.find({}, {$sort: order});
    }
    
    <template name="past_shows">
      {{#each shows}}
        {{> show}}
      {{/each}}
    </template>
    
    <template name="upcoming_shows">
      {{#each shows}}
        {{> show}}
      {{/each}}
    </template>
    
    <template name="show">
      <li>{{_id}}: {{name}}</li>
    </template>