考虑这个把手模板:
<div>
{{content}}
</div>
以下数据:
{
content: 'foo\r\nbar'
}
期望的结果(我需要的):
<div>
foo
bar
</div>
但是当用数据编译把手模板时,我得到了这个:
<div>
foo
bar
</div>
那么,在更换多线值时如何让把手保持缩进? 当然,更改数据不是一种选择。
答案 0 :(得分:6)
preventIndent
:默认情况下,缩进的部分调用会导致整个部分的输出缩进相同的量。当部分写入预标记时,这可能导致意外行为。将此选项设置为true
将禁用自动缩进功能。
因此,如果您能够设置模板以便content
由部分呈现,例如:
<div>
{{> ContentPartial}}
</div>
然后在呈现之前,register the ContentPartial
partial:
Handlebars.registerPartial('ContentPartial', '{{content}}')
然后它将保留缩进。 (实际上,当我的<textarea>
中的自动缩进搞乱了格式化时我发现了这个功能,我不得不禁用它。
答案 1 :(得分:1)
这是不可能的。把手对嵌入数据的地方一无所知。你有数据换行符,你得到了换行符,没有任何地方可以在foo
之后得到一个标签(4个空格),只有一个换行符。
处理问题的方法之一是使用这样的帮助程序,它可以正确地了解缩进和进程传递的参数。
见快速示例。
助手:
Handlebars.registerHelper('indent', function (data, indent) {
var out = data.replace(/\n/g, '\n' + indent);
return new Handlebars.SafeString(out);
});
用作:
{{indent foo ' '}}
将生成具有指定缩进的多行输出。