Handlebars.js: 在模板中分配变量

创建于 2013-03-29  ·  11评论  ·  资料来源: handlebars-lang/handlebars.js

是否可以在模板中分配变量并像外部变量一样使用它?

例子:
我想输出一个表,但 1 列是可选的,取决于数据 (fields[].field2) 是否存在。

在每一行中检查都没有问题,但是如何检查标题?

<table>
  <thead>
    <tr>
      <th>Head 1</th>
      <th>Head 2 (optional)</th>
      <th>Head 3</th>
    </tr>
  </thead>
{{#each fields}}
  <tr>
    <td>{{{field1}}}</td>
    {{#if field2}}<td>{{{filed2}}}</td>{{/if}}
    <td>{{{field3}}}</td>
  </tr>
{{/each}}
</table>

目前我使用了一个不稳定的辅助函数“assign”来创建辅助函数。

{{#each fields}}
  {{#if field2}}
    {{assign "helperVar" "<th>Head 2 (optional)</th>"}}
  {{/if}}
{{/each}}

Output with: {{{helperVar}}}

但这不是一个好的解决方案,我不能在#if 中使用它。

最有用的评论

:+1:

@kpdecker我们可以在模板中包含循环、if 语句和许多其他逻辑结构。 但显然分配一个变量是_too_模板中的太多逻辑? 当其他默认帮助程序包含的逻辑比简单地分配变量的能力要多得多时,我真的不明白该决定背后的原因。

所有11条评论

这违背了无逻辑模板的前提,我认为这不应该是语言级别的构造。

我认为这里推荐的方法是在您的上下文创建逻辑中计算这些数据并将其传递到模板中。 这允许更多的控制,因为您可以使用完整的 javascript 语言,而不是模板语言中实现的任何子集。

template({
  fields: fields,
  hasField2: _.any(fields, function(item) { return item.field2; })
});

我认为这将是一个很好的功能,不是为模板引入更多逻辑,而是传入特定于该模板的变量。

例如,我的 2 个模板使用相同的部分。 我希望能够从模板级别将一些变量传递给该部分,以便在部分范围内为不同的模板输出不同的东西。

+1

+1

:+1:

:+1:

@kpdecker我们可以在模板中包含循环、if 语句和许多其他逻辑结构。 但显然分配一个变量是_too_模板中的太多逻辑? 当其他默认帮助程序包含的逻辑比简单地分配变量的能力要多得多时,我真的不明白该决定背后的原因。

+1

+1

+1

+1

可以使用块参数来实现这些方面的东西,并在此处记录:
http://handlebarsjs.com/block_helpers.html#block -params

由于这是在当前上下文之外的单独命名空间中完成的,因此它提供了比上下文分配更一致的行为。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

NickCis picture NickCis  ·  4评论

sontek picture sontek  ·  3评论

snimavat picture snimavat  ·  5评论

ustun picture ustun  ·  6评论

rizen picture rizen  ·  6评论