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

时间:2010-06-18 17:44:17

标签: ruby-on-rails textarea newline haml carriage-return

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

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

出现如下:

hello  
        How are you?

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

4 个答案:

答案 0 :(得分: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\nBar</textarea>"

并渲染

<p><textarea>Foo&#x000A;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 answerHAML docs about ~

答案 3 :(得分:0)

更改

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

%textarea "hello\r\nHow are you?"
所有在一条线上似乎已经解决了这个问题。我想这意味着这是一个HAML问题。