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

Passing template instance data as a keyword argument to a nested template

本文关键字:参数传递 嵌套 关键字 实例 数据      更新时间:2023-09-26

我有一个名为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} 
  ]
}); 

那么,我可以在标记中的abilities数组上使用{{#each}},这样就可以创建skillbar模板实例。

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

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

使用以下语法:

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

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

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

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

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