2016-02-16 1 views
2

я в конечном итоге со странной ошибкой (функция):Избыточных пространств Wile рендеринг многострочных строк в Rails 5

Вот как test.html.erb файла выглядит следующим образом:

<textarea><%= "a\nb\nc" %></textarea> 

и в оказываемое TextArea я ожидал что-то вроде этого:

a 
b 
c 

Но я получил:

enter image description here enter image description here

Откуда эти избыточные пространства?

Rails 5.0.0.beta2

UDP: я должен упомянуть это раньше, но у меня такая же проблема при использовании f.text_area внутри form_for блока. Это выглядит следующим образом:

.form 
    =form_for article do |f| 
    .form-group 
     =field_label f, :text, true 
     =f.text_area :text, class: %w(form-control), rows: 20, placeholder: t('placeholder.article_text') 

(HAML)

я в конечном итоге с ним, и только упрощена эксплойт простой эрб один файл с струна

UDP2: Вот как это выглядит с simple_format: <textarea><%= simple_format("a\nb\nc") %></textarea>

enter image description here

Я должен кое-что прояснить: это текстовое поле используется для редактирования текста статьи. И затем он (текст) будет обрабатываться с помощью процессора разметки (RDiscount), прежде чем появится на html-странице. Я понятия не имею, почему я должен использовать simple_format для отображения исходного текста в textarea и почему это enter image description here должно стать этим enter image description here после сохранения?

+0

Почему бы не использовать html 'br'? ' '? –

+0

@ Becouse Acctually Зелёного Я использую помощник f.text_area и производить один и тот же вопрос – atomAltera

ответ

1
<textarea><%= "a\r\nb\r\nc" %></textarea> 

\n новая линия будет принимать к следующей строке на той же позиции, где вы были в предыдущей строке \r является возврат каретки означает перейти в начало строки.

Но я не буду рекомендовать этот подход следует использовать <br/> тег вместо

поэтому используйте

<textarea><%= WhatEverTheTextIs.gsub(/\n/, '<br/>').html_safe %></textarea> 

Это заменит все символы новой строки в <br> теге

Еще одно простое решение заключается в использовании simple_format т.е.:

<textarea><%= simple_format(YOUR_TEXT_HERE) %></textarea> 

UPDATE

Вот код для использования формы помощника

.form 
    =form_for article do |f| 
    .form-group 
     =field_label f, :text, true 
     =f.text_area :text,:value=>simple_format(article.text), class: %w(form-control), rows: 20, placeholder: t('placeholder.article_text') 
+0

Фактически же проблема происходит при использовании помощника f.text_area внутри form_for помощника, и это общая проблема – atomAltera

+0

Да, это то же самое. Вы можете использовать любой из вышеупомянутых методов в f.text_area, например f.text_area: description,: value => simple_format (YOUR_TEXT_HEAR) –

+0

Нет, он работает точно так, как должен :) Но теперь пробелы появляются перед тегом
, см. UDP2 – atomAltera

1

Я просто побежал в ту же самую проблему. Все это сводится к пробелам в ваших шаблонах и макетах. В моем случае мое главное приложение использует HAML и имеет application.html.haml с сечением, как так

#content.container{tabindex: "-1"} 
     .row 
     - if content_for?(:left_nav) 
      .col-md-3.sidebar 
      = yield(:left_nav) 
      .col-md-9 
      = flash_helper 
      = yield 

      %footer 
       = render :partial => 'shared/footer' 

Это, по крайней мере, 10 пробелов перед «выходом» основного содержания.

Тогда я использовал вид из драгоценного камня, который был в ERB, а не HAML. Но, поскольку мой основной формат приложения - HAML, рендеринг/обработка представления проходит через рендеринг HAML. HAML уже обрабатывает пробелы и тексарию, но когда отображается окончательный и полный вид, все лишние пробелы из основного макета включены в html и заставляют содержимое текстовой области отступать.

Почему первая строка не имеет отступ? Поскольку функция «сохранить» HAML очищает пробел для первой строки в текстовой области. См. https://github.com/haml/haml/issues/516.

Для меня легко установить HAML для использования «уродливого» режима. Это избавляет от всех ведущих пробелов при визуализации представлений. В «HAML FAQ» есть больше о «уродливом» режиме и новостях в текстовых областях. Чтобы настроить HAML для использования уродливого режима:

Для повышения производительности Haml по умолчанию использует {Haml :: Options # уродливый «уродливый» режим) в приложениях Rails, работающих на производстве. Ужасный режим - это когда пробелы удаляются, и это может вызвать проблемы периодически.

Если вы используете Rails, вы можете изменить поведение по умолчанию, создав файл config/initializers/haml.rb и добавив следующую строку.

Haml::Template.options[:ugly] = true

ссылки я нашел полезным при исследовании этого:

Мои версии Rails 4.2.6 и 4.0.7 HAML

4

В Haml используйте

~ f.text_area :text 

вместо

= f.text_area :text 

Оператор ~ подавляет «симпатичные» строки в HAML, что полезно w с тегами TEXTAREA и PRE. См. Whitespace preservation in HAML для получения дополнительной информации.

Смежные вопросы