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