当我使用\ r \ n(回车符 - 换行符)填充带有文本的textarea时,文本格式不正确[更新:\ r \ n是填写textarea时生成的内容,我只是从数据库以前填写的内容。还要注意,在生产环境中我似乎没有这个问题。 END UPDATE]例如:
%textarea
= "hello\r\nHow are you?"
出现如下:
hello
How are you?
我认为这可能与HAML有关。谁能帮我吗? 注意:如果我使用\ n \ r \ n它工作正常,但这在技术上是不正确的,并且id必须做一些gsubs来反转它们以便正确显示。
答案 0 :(得分:15)
因为Haml自动缩进HTML源代码,所以像pre和textarea这样的空白敏感标签的内容可能会被搞砸。解决方案是使用HTML换行实体

替换这些标记内的换行符,Haml使用Haml::Helpers#preserve
和Haml::Helpers#find_and_preserve
帮助程序执行这些操作。
通常情况下,当您使用需要它的标签时,Haml会自动为您执行此操作(可以使用:preserve
选项进行自定义)。例如,
%p
%textarea= "Foo\nBar"
将编译为
<p>
<textarea>
Foo
Bar</textarea>
</p>
但是,如果帮助者正在生成标记,则Haml无法检测到该标记,因此您必须自己调用Haml::Helpers#find_and_preserve
。您还可以使用~
,它与=
相同,只是它会自动在其输入上运行find_and_preserve
。例如:
%p= find_and_preserve "<textarea>Foo\nBar</textarea>"
与
相同%p~ "<textarea>Foo\nBar</textarea>"
并渲染
<p><textarea>Foo
Bar</textarea></p>
来源:this Haml FAQ。
答案 1 :(得分:2)
继续@ nex3的回答,如果你想在textarea中做一些多行内容,试试这样:
%textarea#textarea_id{:name => 'area_name'}
:preserve
Line1
Line2
Line3
Line4
Line5
答案 2 :(得分:2)
如果= f.text_area :foo
在每个换行符处显示不需要的空格,则为简短回答:
将=
替换为~
有关其背后原因的更详细说明,请阅读Natalie's answer和HAML docs about ~。
答案 3 :(得分:0)
更改
%textarea
= "hello\r\nHow are you?"
到
%textarea "hello\r\nHow are you?"
所有在一条线上似乎已经解决了这个问题。我想这意味着这是一个HAML问题。