2010-06-18 61 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 ~