【问题标题】:Is there a way to pass a parameter to Handlebars template in Meteor?有没有办法将参数传递给 Meteor 中的 Handlebars 模板?
【发布时间】:2013-01-08 12:25:37
【问题描述】:

我正在使用 Meteor 0.5.2 并尝试解决在我看来是一个显而易见的模式,应该有一个简单的解决方案。

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

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

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

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

<template name="tv_program">
   {{#each shows}}
   ...
</template>

理想情况下,我想做这样的事情:

{{> tv_program past_shows}}
...
{{> tv_program upcoming_shows}}

将参数传递给 tv_program 模板实例,我可以从 JavaScript 读取该参数并调整 mongo 查询。

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

我查看了带参数的部分/助手,但这似乎不是我问题的解决方案。

谢谢,弗拉基米尔

【问题讨论】:

    标签: meteor handlebars.js


    【解决方案1】:

    您在错误的层面上解决问题。与其试图告诉你的代码从你的模板做什么,你应该告诉你的模板从你的代码做什么。例如:

    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>
    

    【讨论】:

    • 感谢拉胡尔向我指出这个方向。我按照你的建议重构了我的代码。完成后,我的两个模板中都留下了一段相同的 HTML 代码(示例中的past_shows、competitive_shows 模板 - 它们看起来应该相同,并且真正的模板代码与图像和用户相关数据很复杂)。我想这没关系,因为在我的视图中拥有冗余的相同代码比在“控制器/模型”JavaScript 中更好。
    • 你能把重复的代码移到show模板中吗?
    • 其实我可以做到。我的真实代码与我在问题中使用的简单示例不同。谢谢院长。
    【解决方案2】:

    如果您为您的应用使用状态机,例如meteor-router,您可以使用一个模板并根据应用状态使用即将到来或过去的节目填充它。

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多