更换多线值时如何使把手保持缩进?

时间:2014-09-05 15:48:19

标签: html handlebars.js

考虑这个把手模板:

<div>
    {{content}}
</div>

以下数据:

{
    content: 'foo\r\nbar'
}

期望的结果(我需要的):

<div>
    foo
    bar
</div>

但是当用数据编译把手模板时,我得到了这个:

<div>
    foo
bar
</div>

那么,在更换多线值时如何让把手保持缩进? 当然,更改数据不是一种选择。

2 个答案:

答案 0 :(得分:6)

来自the compile reference

  

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 '   '}}

将生成具有指定缩进的多行输出。