假设我有以下模板:
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>
谢谢!
答案 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~}}
我在这个相关问题的答案中找到了这个解决方案:
答案 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~}}