如何删除Handlebars生成的换行符?

时间:2014-02-11 21:18:48

标签: handlebars.js

假设我有以下模板:

start
{{#if data}}
data
{{/if}}
end

无论我传递给模板的是什么,它总会有两个额外的换行符:

start

data

end

有没有办法让Handlebars不生成标签占用的换行符(不移动标签本身)?例如

start
data
end

我之所以想要这样,是因为有些情况(比如XML),不希望换行。

例如以下内容:

<parent>
    {{#each}}
        <child>{{.}}</child>
    {{/each}}
</parent>

将生成

<parent>

    <child>foo</child>

    <child>bar</child>

</parent>

将{{#each}},{{/ each}}折叠到一行会导致Handlebars在一行上生成列表。例如,这个:

 <parent>
     {{#each}}<child>{{.}}</child>{{/each}}
 </parent>

将生成

 <parent>
     <child>foo</child><child>bar</child>    
 </parent>

因此,为了生成没有多余换行符的XML,我的模板最终看起来像这样:

 <parent>{{#each}}
     <child>{{.}}{{/each}}
 </parent>

谢谢!

3 个答案:

答案 0 :(得分:11)

this question。尝试将swung破折号添加到括号中,例如{{&gt;部分〜}}代替{{&gt; partial}},这将删除换行符。在你的情况下,它将是:

start
{{#if data ~}}
data
{{/if ~}}
end

哪个会编译为:

start 
data 
end

答案 1 :(得分:0)

here给出的答案对我使用快速把手3.0.0不起作用。工作的内容略有不同:

{{~#each children~}}
  {{this}}
{{~/each~}}

我在这个相关问题的答案中找到了这个解决方案:

https://stackoverflow.com/a/23636497/54426

答案 2 :(得分:0)

对于那些着陆试图删除所有后续尾随行的人,我认为最干净的实现方法是在所有相关行的末尾添加{{"\n"~}}

从技术上讲,"\n"可以是空的任何内容,即""。我使用"\n"来明确我在编辑器中的工作。

示例

start{{"\n"~}}
data
end

结果

startdata
end

示例

start{{"\n"~}}



data
end

结果

startdata
end

示例

start{{"\n"~}}


data{{"\n"~}}


end

结果

startdataend

编辑

或者:

Handlebars.registerHelper(
  'singleLineOnly',
  function (options) { // "this" cannot be provided to inline function!
    return options.fn(this).replace(/[\r\n]+/gm, '')
  }
)
Handlebars.registerHelper(
  'singleSpaceOnly',
  function (options) { // "this" cannot be provided to inline function!
    return options.fn(this).replace(/\s\s+/g, ' ')
  }
)

这将允许您采取类似的操作:

{{#each this}}
  {{#singleLineOnly}}
  {{#singleSpaceOnly}}

  {{calculatedAmount}}

  {{!an example comment}}
  {{#if unitOfMeasure.translate}}
    {{{unitOfMeasure.translate.value}}}
  {{/if}}

  {{!some random comment}}
  {{#unless unitOfMeasure.translate}}
    {{{unitOfMeasure.value}}}
  {{/unless}}

  {{!Some random comment}}
  {{#ifNotEquals (lowerCase product.value) "other"}}
    {{!If translated, use translated UOM}}
    {{#if product.translate}}
      {{{product.translate.value}}}
    {{/if}}
    {{!If not translated, use default UOM}}
    {{#unless product.translate}}
      {{{product.value}}}
    {{/unless}}
  {{/ifNotEquals}}

  {{!just some more logic for example}}

  {{#ifNotEquals (lowerCase ingredient.value) "other"}}
    {{!If translated, use translated UOM}}
    {{#if ingredient.translate}}
      {{{ingredient.translate.value}}}
    {{/if}}
    {{!If not translated, use default UOM}}
    {{#unless ingredient.translate}}
      {{{ingredient.value}}}
    {{/unless}}
  {{/ifNotEquals}}
  <br/>

  {{/singleSpaceOnly}}
  {{/singleLineOnly}}
{{/each}}

最后得到这个:


1/2 oz. first ingredient <br/>
1 pump(s) another ingredient <br/>
3/4 oz. this ingredient <br/>
2 shot(s) that ingredient <br/>
last instruction <br/>

{{#singleLineOnly}}{{#singleSpaceOnly}}可用作任何文本的包装。您很可能希望将它们与~配合使用,以进行其他的空白前后控制。例如:{{~#singleLineOnly~}}