2010-06-18 17 views
11

Quando popolgo un'area di testo con testo usando \ r \ n (ritorno a capo - riga nuova) il testo è formattato in modo errato [AGGIORNAMENTO: \ r \ n è ciò che viene generato durante il riempimento fuori da una textarea, sto semplicemente estraendo da un database ciò che è stato precedentemente compilato. Inoltre, nell'ambiente di produzione non sembra che abbia questo problema. AGGIORNAMENTO FINE] Ad esempio:Formattazione area di testo popolata, ritorni a capo, ritorni a capo e HAML

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

viene fuori in questo modo:

hello 
     How are you? 

Sto pensando che questo potrebbe avere qualcosa a che fare con HAML. Qualcuno mi può aiutare? Nota: se uso \ n \ r funziona correttamente, ma questo è tecnicamente scorretto e l'id deve fare alcuni gsub per invertire la visualizzazione corretta.

+0

Sono presenti spazi/ritorni a capo all'interno del tag textarea? Per esempio. ''. – bernie

+0

Sì, quando guardo la sorgente c'è un po 'di spazio tra la prima e la seconda parte. – Mike

+0

normalmente nelle stringhe si usa '' \ n "' per una nuova riga. Non funziona? – nathanvda

risposta

15

Poiché Haml indenta automaticamente il codice sorgente HTML, il contenuto dei tag sensibili allo spazio bianco come pre e textarea può essere rovinato. La soluzione consiste nel sostituire le nuove righe all'interno di questi tag con entità newline HTML 
, che Haml utilizza gli helper Haml::Helpers#preserve e Haml::Helpers#find_and_preserve.

Normalmente, Haml lo farà automaticamente quando si utilizza un tag che ne ha bisogno (può essere personalizzato utilizzando l'opzione :preserve). Ad esempio,

%p 
    %textarea= "Foo\nBar" 

sarà compilato per

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

Tuttavia, se un aiutante sta generando il tag, Haml non può rilevare che e quindi dovrete chiamare Haml::Helpers#find_and_preserve te stesso. È inoltre possibile utilizzare ~, che è lo stesso di = tranne per il fatto che esegue automaticamente find_and_preserve in ingresso. Ad esempio:

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

è uguale

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

e rende

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

Fonte: this Haml FAQ.

+0

Grazie, mi è piaciuto wtf: p –

+1

avviato gsubing lol –

+0

nex3, ENORME grazie! (Posso abbracciarti?): D. '.gsub (" \ n ", '& # xAAA;'). html_safe' – lokson

0

Modifica

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

a

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

tutto su una linea sembra aver risolto il problema. Immagino che questo significhi un problema di HAML.

0

Continuando con la risposta di @ NEX3, se si vuole fare un po 'di contenuti su più righe all'interno di una textarea, provare in questo modo:

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

Risposta breve se = f.text_area :foo display indesiderato bianco-spazio in ogni fine riga:

sostituire = con ~

per una spiegazione più dettagliata per le ragioni dietro di esso, leggere Natalie's answer e HAML docs about ~.

Problemi correlati