0

这是我想在车把模板中执行的操作:

{{#capture $str}}racing car{{/capture}}
i want a {{$str}} for xmas!

预期结果:

i want a racing car for xmas!

因此,应将捕获/记录的 html 写入本地变量,然后可以打印。

有任何想法吗?


编辑:用例
好吧,起初我只想知道这是否可能。我可能会尝试一下,然后再做其他事情。

不过,这里有一个更详细的用例。它仍然是虚构的,但看到确切的东西不会增加太多价值。

{{#capture $long_html_1}}
  <input class=".." name=".." value=".." />
{{/capture}}

{{#capture $long_html_2}}
  <select class=".." name="..">
    <option ... />
    <option ... />
    <option ... />
    <option ... />
  </select>
{{/capture}}

{{#if layoutVariation1}}
  <section class="layout-1">
    <div class="row-fluid">
      <div class="span5">{{$long_html_1}}</div>
      <div class="span7">{{$long_html_2}}</div>
    </div>
  </section>
{{else}}
  <fieldset class="whatever-something-else">
    <label ...>The label</label>
    <div class="box">{{$long_html_1}}</div>
    <div class="box">{{$long_html_2}}</div>
  </fieldset>
{{/if}}

我不想重复两个 $long_html_X 元素的声明。我也不想为他们每个人制作一个单独的模板(或者我应该?)。我想减少 if/else 车把标签的数量,以保持可读性。

4

1 回答 1

1

您可以像变量一样使用“车把部分”。

部分模板

<script id="long_html_1" type="text/x-handlebars-template">
  <input class=".." name=".." value=".." />
</script>

<script id="long_html_2" type="text/x-handlebars-template">
  <select class=".." name="..">
    <option ... />
    <option ... />
    <option ... />
    <option ... />
  </select>
</script>

主模板

<script id="main" type="text/x-handlebars-template">
{{#if layoutVariation1}}
  <section class="layout-1">
    <div class="row-fluid">
      <div class="span5">{{> long_html_1}}</div>
      <div class="span7">{{> long_html_2}}</div>
    </div>
  </section>
  {{else}}
  <fieldset class="whatever-something-else">
    <label ...>The label</label>
    <div class="box">{{> long_html_1}}</div>
    <div class="box">{{> long_html_2}}</div>
  </fieldset>
{{/if}}
</script>

渲染脚本

var template = Handlebars.compile($("#main").html());

Handlebars.registerPartial("long_html_1", $("#long_html_1").html());
Handlebars.registerPartial("long_html_2", $("#long_html_2").html());

var html1 = template({layoutVariation1: true});
var html2 = template({layoutVariation1: false});

$(document.body).html(html1 + '<hr>' + html2);

您可以在http://jsfiddle.net/nUDf3/查看一个工作示例

于 2013-01-04T00:36:09.673 回答