Форматирование населенных пунктов Textarea, возврат каретки, Newlines и Haml
-
28-09-2019 - |
Вопрос
Когда я заполняю текстура с текстом, используя r n (возврат каретки - ньюнлина), текст отформатирован неправильно [обновление: R n, что сгенерировано при заполнении текстуарии, я просто тянусь из базы данных, что было ранее заполненные. Также следует отметить, что в производственной среде я не имею эту проблему. Конечное обновление] Например:
%textarea
= "hello\r\nHow are you?"
выходит так:
hello
How are you?
Я думаю, что это может иметь что-то связанное с Хамлем. Может кто-нибудь мне помочь? ПРИМЕЧАНИЕ. Если я использую n R, это работает нормально, но это технически неверно и идентифицировать, чтобы сделать некоторые GSubs, чтобы изменить их для правильного дисплея.
Решение
Поскольку HAML автоматически отступает от исходного кода HTML, содержимое пробел-чувствительных тегов, таких как предварительно и текстура, может прикрутиться. Решение состоит в том, чтобы заменить новые линия внутри этих тегов с помощью HTML Newline объектами 

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