Возможно ли иметь HTML-отступ в Haml, сгенерированный помощником вида в Rails? - PullRequest
5 голосов
/ 07 октября 2009

Скажем, у меня есть ресурс вещей с методом помощника вида, таким как:

module ThingsHelper
  def foo
    ret = ""
    3.times { ret += content_tag(:li, "foo") }
    content_tag(:ul, ret)
  end
end

Это используется в шаблоне:

%p
  = foo 

Сгенерированный исходный код HTML выглядит следующим образом:

<!DOCTYPE html>
<html>
    <head>
        <title>Foo</title>
    </head>
</html>
<body>
    <p>
        <ul><li>foo</li><li>foo</li><li>foo</li></ul>
    </p>
</body>

Как видите, вспомогательный вывод не имеет отступов, как остальная часть кода. Есть ли способ исправить это?

Ответы [ 2 ]

10 голосов
/ 07 октября 2009

Попробуйте haml_tag вспомогательный метод , предоставляемый Haml. В некотором смысле это похоже на content_tag, но выводит HTML с правильным отступом. Основное отличие состоит в том, что он выводит непосредственно в шаблон, а не возвращает строку. Например:

module ThingsHelper
  def foo
    haml_tag :ul do
      3.times { haml_tag(:li, "foo") }
    end
  end
end

(Примечательно, что для отступа считается очень плохим стиль Ruby, а не два пробела).

1 голос
/ 07 октября 2009

Я сомневаюсь в этом - по крайней мере, без значительного количества хулиганства.

Ваш = foo просто печатает то, что возвращает ваш foo помощник - он не анализируется хамлом. И вы не можете написать хамл в вашем вспомогательном методе.

Самый простой способ справиться с этим - просто добавить буквенные пробельные символы в ваш помощник (например, \n и \t).

Вы также можете require соответствующий класс (ы) haml в вашем помощнике и вручную вызывать методы синтаксического анализа на ret, но это, вероятно, сложнее, чем стоит.

...