将模板实例数据作为关键字参数传递给嵌套模板

时间:2015-07-05 16:55:15

标签: javascript templates meteor meteor-blaze

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

因此,例如,我可以输入:

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

使用标签“strength”渲染技能栏,其进度条填满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>

1 个答案:

答案 0 :(得分:1)

请改用此语法:

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

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

或者您可以使用以下语法:

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

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