«без пробелов» эквивалент шаблонов Django в Rails - PullRequest
4 голосов
/ 03 августа 2011

Обратите внимание на удобочитаемость и баланс:

<li class='aclass anotherclass <%= maybeaconditionalclass %>'>
   <a href="<%= some stuff %>">
     <%= some other stuff %>
   </a>
</li>

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

<li class='apossibleclass anotherclass <%= maybeaconditionalclass %>'>
   <a href="<%= some stuff %>"><%= some other stuff %></a>
</li>

Тем не менее, та же проблема остается, если я теперь рассмотрим такой тип:

li.apossibleclass:after {
    content: "/";
}

как пробел между закрывающими Aи LI мешает тому, что должно прилипать к концу моего списка.В качестве обходного пути я мог создать только этот уродливый беспорядок:

<li class='apossibleclass anotherclass <%= maybeaconditionalclass %>'>
   <a href="<%= some stuff %>"><%= some other stuff %></a></li>

Джанго предложил хорошее решение: {% spaceless%} , поэтому я ищу эквивалент {% spaceless%} тег в шаблонах Rails erb.

1 Ответ

7 голосов
/ 03 августа 2011

Да, это была бы полезная функция, и, насколько я знаю, в Rails нет ничего подобного.Итак, я его кодировал.

# Strip all whitespace between the HTML tags in the passed block, and
# on its start and end.
def spaceless(&block)
  contents = capture(&block)

  # Note that string returned by +capture+ is implicitly HTML-safe,
  # and this mangling does not introduce unsafe changes, so I'm just
  # resetting the flag.
  contents.strip.gsub(/>\s+</, '><').html_safe
end

Это помощник, который вы можете поместить в свой application_helper.rb, а затем использовать его так:

<%= spaceless do %>
  <p>
      <a href="foo/"> Foo </a>
  </p>
<% end %>

... что приведет кв выходной строке, например

<p><a href="foo/"> Foo </a></p>

К сожалению, это работает только в Rails 3. Поддержка Rails 2 для такой функции потребует некоторых грязных хаков в ERb.

...