在Handlebars中的上下文内呈现模板

时间:2016-08-05 20:22:38

标签: handlebars.js

是否可以在传递给顶级模板的上下文中呈现模板,甚至只是部分模板?看起来这可能需要递归渲染,但也许我错过了一些东西。

以下示例使用Bootstrap演示了这一点。

说这是我的顶级模板:

<div class="panel">
  <div class="panel-body">
    {{{description}}}
  </div>
</div>

我的背景是:

{
  description: "\
    Some text before the warning.\

    <div class=\"alert alert-warning\" role=\"alert\">\
      <span class=\"glyphicon glyphicon-warning-sign\" aria-hidden=\"true\">&nbsp;</span>\
      My warning here.\
    </div>\

    Some text after the warning."
}

我想做的是将警报分成一部分,原因如下:

  • 在周围文本中任意放置
  • 可以为除警告(危险,信息等)以外的其他类型制作部分内容
  • 可以在上下文字符串
  • 中添加所需数量

由于这些原因,似乎无法将其置于顶级模板中。

部分看起来像这样:

<script id="partial-warning-template" type="text/x-handlebars-template">
  <div class="alert alert-warning" role="alert">
    <span class="glyphicon glyphicon-warning-sign" aria-hidden="true">&nbsp;</span>
    {{{warning-message}}}
  </div>
</script>

一旦到位,我就能像这样使用它:

{
  description: "\
    Some text before the warning.\

    {{> partial-warning-template \"My warning here.\"}}\

    Some text after the warning.\

    {{> partial-warning-template \"Now adding a second warning.\"}}"
}

也许我错过了一些基本的东西 - 是否有更惯用的方法呢?

1 个答案:

答案 0 :(得分:0)

您无法在description值中包含部分块,并希望通过顶级模板方法将它们评估为部分块;整个description字符串将作为单个文字字符串吐出。

您需要做的是在将description的上下文对象传递给顶级模板方法之前评估部分

如果您使用以下方式预编译了部分内容:

Handlebars.registerPartial('warn', Handlebars.compile(document.getElementById('partial-warning-template').innerHTML));

然后,当您构建description字符串时,您将能够调用此部分:

{
    description: 'Some text before the warning.' +
              Handlebars.partials.warn({ 'warning-message': 'My warning here.' }) +
              'Some text after the warning.' +
              Handlebars.partials.warn({ 'warning-message': 'Now adding a second warning.' })
}