2010-06-18 22 views
11

Cuando llene un área de texto con texto usando \ r \ n (retorno de carro - nueva línea) el texto está formateado incorrectamente [ACTUALIZACIÓN: \ r \ n es lo que se genera al llenar fuera de un área de texto, simplemente estoy extrayendo de una base de datos lo que se completó previamente. También para observar, en el entorno de producción no parece tener este problema. ACTUALIZACIÓN DE FIN] Por ejemplo:Formateo de área de texto poblada, retornos de carro, nuevas líneas y HAML

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

sale así:

hello 
     How are you? 

Estoy pensando que esto podría tener algo que ver con HAML. ¿Puede alguien ayudarme? Nota: si uso \ n \ r funciona bien, pero eso es técnicamente incorrecto y la identificación tiene que hacer algunos gsubs para invertirlos y mostrarlos correctamente.

+0

¿Hay espacios/retornos de carro dentro de la etiqueta textarea? P.ej. ''. – bernie

+0

Sí, cuando veo la fuente, hay un montón de espacio entre la primera y la segunda parte. – Mike

+0

normalmente en cadenas, solo usa '" \ n "' para una nueva línea. ¿Eso no funciona? – nathanvda

Respuesta

15

Dado que Haml sangra automáticamente el código fuente HTML, el contenido de las etiquetas sensibles al espacio en blanco como pre y textarea puede estropearse. La solución es reemplazar las nuevas líneas dentro de estas etiquetas con las entidades HTML de nueva línea 
, que Haml usa con los ayudantes Haml::Helpers#preserve y Haml::Helpers#find_and_preserve.

Normalmente, Haml hará esto por usted automáticamente cuando esté utilizando una etiqueta que lo necesite (esto se puede personalizar utilizando la opción :preserve). Por ejemplo,

%p 
    %textarea= "Foo\nBar" 

se compilará a

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

Sin embargo, si un ayudante está generando la etiqueta, Haml no puede detectar eso y por lo que tendrá que llamar Haml::Helpers#find_and_preserve mismo. También puede usar ~, que es lo mismo que =, excepto que ejecuta automáticamente find_and_preserve en su entrada. Por ejemplo:

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

es la misma que

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

y hace

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

Fuente: this Haml FAQ.

+0

Hombre gracias, yo estaba como wtf: p –

+1

comenzó gsubing lol –

+0

nex3, ENORME, gracias! (¿Puedo abrazarte?): D. '.gsub (" \ n ", '& # x000A;'). html_safe' – lokson

0

Cambio

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

a

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

todo en una línea parece haber resuelto el problema. Supongo que eso significa que fue un problema HAML.

0

Continuando con la respuesta de @ NEX3, si usted quiere hacer algo de contenido de varias líneas dentro de un área de texto, trate de esta manera:

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

Respuesta corta si = f.text_area :foo pantallas de espacio en blanco no deseados en cada salto de línea:

reemplazar = con ~

para una explicación más detallada de las razones detrás de él, leer Natalie's answer y HAML docs about ~.

Cuestiones relacionadas