2010-06-18 60 views
11

当我使用\ r \ n(回车 - 换行符)填充文本的textarea时,文本格式不正确[更新:\ r \ n是填充时out一个textarea,我只是从数据库中提取以前填充的内容。另外要注意的是,在生产环境中,我似乎没有这个问题。结束时更新例如:格式化已填充的textarea,回车符,换行符和HAML

%textarea 
    = "hello\r\nHow are you?" 

出来是这样的:

hello 
     How are you? 

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

+0

textarea标签内是否有空格/回车符?例如。 ''。 – bernie 2010-06-18 17:51:31

+0

是的,当我查看源代码时,第一部分和第二部分之间有一堆空间。 – Mike 2010-06-18 17:56:23

+0

通常在字符串中,你只需使用'“\ n”'换行符。这不正常吗? – nathanvda 2010-06-18 20:11:43

回答

15

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

通常,当您使用需要它的标签时,Haml会自动为您做这件事(可以使用:preserve选项自定义)。例如,

%p 
    %textarea= "Foo\nBar" 

将被编译到

<p> 
    <textarea> 
Foo&#x000A;Bar</textarea> 
</p> 

但是,如果一个助手正在生成标签,Haml的无法检测,因此你必须打电话Haml::Helpers#find_and_preserve自己。您也可以使用~,它与=相同,只是它在其输入上自动运行find_and_preserve。例如:

%p= find_and_preserve "<textarea>Foo\nBar</textarea>" 

相同

​​

并呈现

<p><textarea>Foo&#x000A;Bar</textarea></p> 

来源:this Haml FAQ

+0

男士谢谢,我很喜欢wtf:p – 2011-10-05 16:46:26

+1

开始gsubing lol – 2011-10-05 16:46:48

+0

nex3,非常感谢! (我可以拥抱你吗?):D。 '.gsub(“\ n”,'&#x000A;')。html_safe' – lokson 2015-04-14 10:35:14

0

更改

%textarea 
    = "hello\r\nHow are you?" 

%textarea "hello\r\nHow are you?" 

都在同一行似乎已经解决了这个问题。我想这意味着这是一个HAML问题。

0

继续与@ NEX3的答案,如果你想要做一个textarea里面的一些多行内容,尝试这样的:

%textarea#textarea_id{:name => 'area_name'} 
    :preserve 
    Line1 
    Line2 
    Line3 
    Line4 
    Line5 
2

简短的回答,如果在每一个换行符= f.text_area :foo显示器不需要的空白:

~

更换=对于其背后的原因更详细的解释,阅读Natalie's answerHAML docs about ~