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

Когда я заполняю текстовое поле текстом, используя \ r \ n (возврат каретки - перевод строки), текст форматируется неправильно [ОБНОВЛЕНИЕ: \ r \ n - это то, что генерируется при заполнении текстового поля, я просто извлекаю из базы данных то, что было ранее заполненный. Также, чтобы отметить, в производственной среде у меня, кажется, нет этой проблемы. КОНЕЦ ОБНОВЛЕНИЯ] Например:

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

выходит так:

hello  
        How are you?

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

4 ответа

Решение

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

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

%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 о ~.

Продолжая с ответом @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.

Другие вопросы по тегам