Представление ERB, встроенное в макет Haml: что теперь делать с пробелами?

У меня есть приложение Rails 3, в котором все представления выполняются в Haml. Тем не менее, есть некоторые представления, исходящие от необходимых драгоценных камней, которые находятся в ERB, и Haml добавляет пробелы, и это портит текстовые области и тому подобное. (Если вы не знакомы с этим аспектом haml, посмотрите здесь .)

Я бы предпочел не преобразовывать свой макет в ERB, а поскольку гем находится в ERB, все традиционные решения пробелов Haml не помогают.

Итак, как мне заставить мои текстовые поля (и ‹pre›s и т. д.) не переноситься? Все умное, что я могу сделать в своем приложении, хорошо, иначе я был бы рад применить патч к исходному гему.


Изменить Думаю, я нашел несколько достойных ответов.

Одна вещь, которая работает на конце haml, — это Haml::Template.options[:ugly] = true, которая устраняет все пробелы. Мех, это может быть лучшим решением, но где мои пробелы :( Мне понравилось, когда это не портило мое приложение.

Другая идея состояла в том, чтобы исправить гем, чтобы автоматически преобразовывать символы \n в before_save, что имитирует то, что делает Haml в ссылке, на которую я ссылался в своем первоначальном вопросе... но это может быть немного больно.

Окончательное решение, которое я придумал, которое также, кажется, работает, состоит в том, чтобы создать документ _form.html.haml, который находится рядом с документом _form.html.erb в плагине и является идентичным. По-видимому, подключаемый модуль не должен зависеть от Haml, но если родительское приложение обрабатывает Haml, оно будет искать представление haml, прежде чем искать представление ERB. Однако есть одно предостережение: Haml действительно нужно загружать в начале приложения. Итак, у меня есть строка в нижней части application.rb, которая сама по себе говорит «Haml».

Так что для тех, у кого еще есть эта проблема, теперь у вас есть 3 решения на выбор, и если у вас есть лучшее, опубликуйте его!


person carpeliam    schedule 13.04.2011    source источник


Ответы (1)


Вы смотрели на фильтр :preserve?

См. http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#preserve-filter

person D. Simpson    schedule 24.05.2011
comment
Привет, Дэйв, спасибо за ответ - я не понимаю, как это применимо. Мой макет в Haml, но отображаемый шаблон (исходящий из плагина) — это ERB. Итак, где-то в моем макете есть = yield, где все шаблоны в моем приложении находятся на Haml, но шаблоны в плагине — ERB. Я не могу разместить фильтр :preserve над доходностью и не могу разместить его в шаблоне ERB, но вы имели в виду что-то другое? - person carpeliam; 25.05.2011
comment
Имея это знание, я не уверен, что :preserve принесет вам пользу. Другой моей мыслью было установить гем maruku и поместить ваш доход под строкой :markdown, но я не уверен, что это тоже сработает. Я думаю, что было бы проще визуализировать вашу проблему с помощью некоторого примера исходного кода, чтобы увидеть, как взаимодействует ERB/HAML. - person D. Simpson; 25.05.2011
comment
Дэйв, примером может служить любое приложение, которое использует Haml для разметки, но использует гем Devise. Devise добавляет шаблоны, и эти представления реализуются в ERB, даже если приложение, в которое оно встраивается, имеет шаблоны/макеты Haml. Если бы у Devise была текстовая область в любой из ее форм, возникла бы та же проблема. - person carpeliam; 26.05.2011