Форматирование заполненного текстового поля, возврата каретки, новых строк и HAML
Когда я заполняю текстовое поле с текстом, используя \r\n (возврат каретки - новая строка), текст отформатирован неправильно [UPDATE:\r\n - это то, что генерируется при заполнении текстового поля, я просто вытягиваю из базы данных, что было ранее заполнено. Также следует отметить, что в производственной среде у меня, похоже, нет этой проблемы. END UPDATE] Например:
%textarea
= "hello\r\nHow are you?"
выглядит следующим образом:
hello
How are you?
Я думаю, что это может иметь какое-то отношение к HAML. Может кто-нибудь мне помочь?
Примечание: если я использую \n\r, он работает нормально, но это технически некорректно, и id должен сделать некоторые gsubs, чтобы отменить их для правильного отображения.
Ответы
Ответ 1
Поскольку Haml автоматически отступает от исходного кода HTML, содержимое чувствительных к пробелу тегов, таких как pre и textarea, может быть запутано. Решение заключается в замене строк новой строки внутри этих тегов на объекты HTML newline 

, которые Haml использует с помощью Haml::Helpers#preserve
и Haml::Helpers#find_and_preserve
помощников.
Обычно Haml будет делать это автоматически, когда вы используете тег, который ему нужен (это можно настроить с помощью опции :preserve
). Например,
%p
%textarea= "Foo\nBar"
будет скомпилирован в
<p>
<textarea>
Foo
Bar</textarea>
</p>
Однако, если хелпер генерирует тег, Haml can not обнаруживает это, и поэтому вам придется называть Haml::Helpers#find_and_preserve
самостоятельно. Вы также можете использовать ~
, что совпадает с =
, за исключением того, что он автоматически запускает find_and_preserve
на своем входе. Например:
%p= find_and_preserve "<textarea>Foo\nBar</textarea>"
совпадает с
%p~ "<textarea>Foo\nBar</textarea>"
и отображает
<p><textarea>Foo
Bar</textarea></p>
Источник: этот FAQ Haml.
Ответ 2
Короткий ответ, если = f.text_area :foo
отображает нежелательное белое пространство в каждой строке новой строки:
замените =
на ~
Для более подробного объяснения причин этого, прочитайте ответ Натали и HAML docs около ~.
Ответ 3
Изменение
%textarea
= "hello\r\nHow are you?"
к
%textarea "hello\r\nHow are you?"
все на одной линии, похоже, решило проблему. Думаю, это означает, что это проблема HAML.
Ответ 4
Продолжая с @nex3 ответ, если вы хотите сделать несколько многострочный контент внутри текстового поля, попробуйте его следующим образом:
%textarea#textarea_id{:name => 'area_name'}
:preserve
Line1
Line2
Line3
Line4
Line5