【问题标题】:Passing template instance data as a keyword argument to a nested template将模板实例数据作为关键字参数传递给嵌套模板
【发布时间】:2015-09-22 19:53:06
【问题描述】:

我有一个名为skillbar 的模板,它接受两个关键字参数titlevalue

例如,我可以输入:

  {{>skillbar title="strength"  value=51}}

渲染一个带有“强度”标签的技能栏,其进度条已填满 51%。


我想创建一堆这样的技能栏,而不是做类似的事情:

{{>skillbar title="strength"     value=51}}
{{>skillbar title="willpower"    value=80}}
{{>skillbar title="imagination"  value=30}}

我宁愿创建一个单独的模板,我可以在其上注册一个帮助程序,其中包含可以用作参数的对象数组。

Template.abilities.helpers({
  abilities: [
    {title: 'strength',    value: 51},
    {title: 'willpower',   value: 80},
    {title: 'imagination', value: 30} 
  ]
}); 

大概那时,我可以 {{#each}} 在我的标记中的 abilities 数组上创建 skillbar 模板实例。

这封装了我想做的事情的本质,但是它抛出了一个语法错误:

<template name="abilities">
  {{#each abilities}}
    {{>skillbar title={{title}} value={{value}} }}
  {{/each}}
</template>

【问题讨论】:

    标签: javascript templates meteor meteor-blaze


    【解决方案1】:

    改用这个语法:

    <template name="abilities">
      {{#each abilities}}
        {{> skillbar}}
      {{/each}}
    </template>
    

    调用子模板时,如果您不传递任何参数,则其当前数据上下文将设置为父模板,这恰好是来自{{#each}} 循环的当前迭代能力。

    您也可以使用以下语法:

    <template name="abilities">
      {{#each abilities}}
        {{> skillbar title=title value=value}}
      {{/each}}
    </template>
    

    但在这种特定情况下,这将是多余的,但无论出于何种原因重命名参数都会很有用。

    【讨论】:

    • 一旦允许,我将接受这一点。优秀的答案。您能否指出一些概述这种行为的文档?
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多