2010-06-18 13 views
11

Wenn ich ein Textfeld mit Text mit \ r \ n (Wagenrücklauf - Zeilenumbruch) bevölkert, wird der Text falsch formatiert [UPDATE: \ r \ n ist was beim Ausfüllen generiert wird aus einem textarea, ziehe ich einfach aus einer datenbank, was vorher ausgefüllt wurde. Auch in der produktionsumgebung scheint ich dieses problem nicht zu haben. END UPDATE] Zum Beispiel:Formatieren von befüllten Textfeldern, Zeilenumbrüchen, Zeilenumbrüchen und HAML

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

kommt wie folgt aus:

hello 
     How are you? 

Ich denke, das ist etwas mit HAML zu tun haben könnte. Kann mir jemand helfen? Hinweis: Wenn ich \ n \ r es funktioniert gut, aber das ist technisch falsch und id muss einige gsubs tun, um sie für die ordnungsgemäße Anzeige umzukehren.

+0

Gibt es innerhalb des Textarea-Tags Leerzeichen/Zeilenumbrüche? Z.B. ''. – bernie

+0

Ja, wenn ich die Quelle ansehe, gibt es eine Menge Platz zwischen dem ersten und zweiten Teil. – Mike

+0

normalerweise in Strings verwenden Sie einfach '" \ n "' für einen Zeilenumbruch. Funktioniert das nicht? – nathanvda

Antwort

15

Da Haml den HTML-Quellcode automatisch einrückt, kann der Inhalt von whitespace-sensitiven Tags wie pre und textarea nicht korrekt dargestellt werden. Die Lösung besteht darin, die Zeilenumbrüche in diesen Tags durch HTML-Zeilenneuheiten 
 zu ersetzen, die Haml mit Hilfe der Helfer Haml::Helpers#preserve und Haml::Helpers#find_and_preserve verwendet.

Normalerweise wird Haml dies automatisch für Sie tun, wenn Sie ein Tag verwenden, das es benötigt (dies kann mit der Option :preserve angepasst werden). Zum Beispiel

%p 
    %textarea= "Foo\nBar" 

werden

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

jedoch kompiliert werden, wenn ein Helfer den Tag generiert, Haml dass nicht erkennen kann und so musst du Haml::Helpers#find_and_preserve selbst nennen. Sie können auch ~ verwenden, das ist dasselbe wie =, außer dass es automatisch find_and_preserve auf seinem Eingang läuft. Zum Beispiel:

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

ist die gleiche wie

%p~ "<textarea>Foo\nBar</textarea>" 

und macht

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

Quelle: this Haml FAQ.

+0

Mann danke, ich war wie wtf: p –

+1

begann gsubing lol –

+0

nex3, RIESIG danke! (Kann ich dich umarmen?): D. '.gsub (" \ n ", '& # x000A;'). html_safe' – lokson

0

Ändern

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

zu

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

alle auf einer Linie scheint das Problem gelöst zu haben. Ich denke, das bedeutet, dass es ein HAML-Problem war.

0

Weiter mit @ NEX3 Antwort, wenn Sie einige mehrzeiligen Inhalt in einem Textfeld tun wollen, versuchen Sie es wie folgt aus:

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

Kurze Antwort, wenn = f.text_area :foo Displays unerwünschte white-space an jedem Newline:

ersetzen = mit ~

für eine ausführlichere Erklärung für die Gründe dahinter, lesen Natalie's answer und die HAML docs about ~.

Verwandte Themen