格式化填充的textarea,回车符,换行符和HAML

Mic*_*ael 11 haml textarea newline ruby-on-rails carriage-return

当我使用\ r \n(回车 - 换行)填充文本textarea中的文本格式不正确[更新:\ r \n是填写一个textarea时产生什么,我只是从数据库中什么是拉以前填写.还要注意,在生产环境中我似乎没有这个问题.END UPDATE]例如:

%textarea  
  = "hello\r\nHow are you?"
Run Code Online (Sandbox Code Playgroud)

像这样出来:

hello  
        How are you?
Run Code Online (Sandbox Code Playgroud)

我想这可能与HAML有关.谁能帮我吗?注意:如果我使用\n\r \n它工作正常,但这在技术上是不正确的,并且id必须做一些gsubs来反转它们以便正确显示.

Nat*_*aum 15

因为Haml自动缩进HTML源代码,所以像pre和textarea这样的空格敏感标签的内容可能会搞砸.解决方案是用HTML新行实体替换这些标记内的换行符
,Haml使用Haml::Helpers#preserveHaml::Helpers#find_and_preserve帮助程序实现.

通常情况下,当您使用需要它的标签时,Haml会自动为您执行此操作(可以使用该:preserve选项进行自定义).例如,

%p
  %textarea= "Foo\nBar"
Run Code Online (Sandbox Code Playgroud)

将被编译为

<p>
  <textarea>
Foo&#x000A;Bar</textarea>
</p>
Run Code Online (Sandbox Code Playgroud)

但是,如果帮助者正在生成标记,则Haml无法检测到该标记,因此您必须Haml::Helpers#find_and_preserve自己调用.您也可以使用~,=除了它自动find_and_preserve在其输入上运行之外.例如:

%p= find_and_preserve "<textarea>Foo\nBar</textarea>"
Run Code Online (Sandbox Code Playgroud)

是相同的

%p~ "<textarea>Foo\nBar</textarea>"
Run Code Online (Sandbox Code Playgroud)

并呈现

<p><textarea>Foo&#x000A;Bar</textarea></p>
Run Code Online (Sandbox Code Playgroud)

来源:这个Haml FAQ.