流星:如何渲染换行符?

时间:2014-03-09 17:14:13

标签: meteor

我有以下变量:"hello↵↵world"。 (价值来自textarea)

问题是,当我要求Meteor使用{{content}}显示时,所有内容都显示在同一行,并且不会考虑换行符。

{{content}}

# renders
hello world

# should render
hello
world

5 个答案:

答案 0 :(得分:11)

如果您使用<pre>标签使用引导程序,则会出现一些您可能不想要的样式...如果您想避免这种情况,可以使用一些简单的CSS来解决这个问题:

.pre {
  white-space: pre;
}

然后用你的内容包装你的内容:

<span class="pre">{{content}}</span>

答案 1 :(得分:8)

<pre>对我来说很好,直到我有很长的文字。默认情况下,它禁用换行和长行打破页面布局或被截断。

你可以用white-space: pre-wrap;解决它,但我最终做的是创建一个Spacebars-Helper,它首先转义文本,然后用<br/>替换所有中断

UI.registerHelper('breaklines', function(text, options) {
  text = s.escapeHTML(text);
  text = text.replace(/(\r\n|\n|\r)/gm, '<br/>');
  return new Spacebars.SafeString(text);
});

然后我会以下列方式在模板中使用帮助器:

{{breaklines title}}

escapeHTML是Underscore.string的一部分,Underscore.string是一个字符串操作扩展的集合,您可以使用meteor add underscorestring:underscore.string引入它,但是任何其他转义html的方式都可以正常工作。

答案 2 :(得分:4)

一种方法是创建一个把手助手:

Handlebars.registerHelper 'breaklines', (text) ->
    text = text.replace /(\r\n|\n|\r)/gm, '<br>'
    return text

然后这样做:(不要忘记三个括号!)

{{{breaklines content}}}

答案 3 :(得分:3)

换行

<pre> Any amount of formatting. </pre>

答案 4 :(得分:0)

只需使用<br>就足够了。