Форматирование заполненных textarea, возврат каретки, новые строки и HAML

когда я заполняю textarea текстом, используя rn (возврат каретки - новая строка), текст отформатирован неправильно [UPDATE: rn-это то, что генерируется при заполнении textarea, я просто вытаскиваю из базы данных то, что было заполнено ранее. Также следует отметить, что в производственной среде у меня, похоже, нет этой проблемы. END UPDATE] например:

%textarea  
  = "hellornHow are you?"

выходит такой:

hello  
        How are you?

Я думаю, что это может иметь какое-то отношение к ХАМЛУ. Может кто-нибудь помочь мне? Примечание: если я использую nr, он работает нормально, но это технически неправильно, и id должен сделать некоторые gsubs, чтобы отменить их для правильного отображения.

4 ответов


поскольку Haml автоматически отступает исходный код HTML, содержимое чувствительных к пробелам тегов, таких как pre и textarea, может быть испорчено. Решение состоит в том, чтобы заменить новые строки внутри этих тегов на HTML newline entities 
, который Haml делает с помощью Haml::Helpers#preserve и Haml::Helpers#find_and_preserve помощников.

обычно Haml сделает это для вас автоматически, когда вы используете тег, который в этом нуждается (это можно настроить с помощью ). Для пример,

%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>

источник: это HAML FAQ.


короткий ответ: если = f.text_area :foo отображает нежелательные пробелы в каждой новой строки:

заменить = С ~

для более подробного объяснения причин этого прочитайте Натали и HAML docs о ~.


продолжая с ответом @nex3, если вы хотите сделать многострочный контент внутри текстового поля, попробуйте следующее:

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

изменение

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

to

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

все на одной линии, похоже, решили проблему. Думаю, это значит, что это была проблема ХЭМЛА.