Форматирование заполненной текстовой области, возврат каретки, новые строки и HAML - PullRequest
11 голосов
/ 18 июня 2010

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

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

выглядит так:

hello  
        How are you?

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

Ответы [ 4 ]

15 голосов
/ 19 июня 2010

Поскольку 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 .

2 голосов
/ 10 декабря 2016

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

заменить = на ~

Более подробное объяснение причин этого см. В ответе Натали и документах HAML о ~ .

2 голосов
/ 20 марта 2015

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

%textarea#textarea_id{:name => 'area_name'}
  :preserve
    Line1
    Line2
    Line3
    Line4
    Line5
0 голосов
/ 19 июня 2010

Изменение

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

до

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

все в одной строке, похоже, решило проблему. Я думаю, это означает, что это была проблема с HAML.

...