Rails: возможно ли написать помощники вида с синтаксисом HAML? - PullRequest
18 голосов
/ 09 марта 2011

Во время рефакторинга было бы очень удобно просто скопировать часть шаблона HAML и вставить его в код помощника.В настоящее время в таких случаях 1) я должен переписать эту часть представления с нуля 2) я должен использовать этот подробный синтаксис, такой как content_tag или haml_tag.

Я знаю, что можно определить партиалы с помощью системного налога HAML, который будет служить помощником.Хотя 1) для меня неудобно создавать отдельный файл для каждой маленькой крошечной функции 2) Синтаксис вызова для частичного довольно многословен.

В идеале я бы хотел, чтобы мой класс * _helper выглядел так:

- def some_helper(*its_args)
  .some_class
    = some_ruby_expression
  %some_tag#some_id
    - another_expression do
      etc

или, по крайней мере, так:

define_haml_helper :some_helper, [:arg1, :arg2], %{
  .some_class
    = some_ruby_expression
  %some_tag#some_id
    - another_expression do
      etc
}

Есть ли плагин, который решает мою проблему?

Или, возможно, вы можете описать, как вы реорганизуете фрагменты HAML вповторно используемые элементы (помощники / функции / частичные / строители / и т. д.)?

Ответы [ 3 ]

13 голосов
/ 09 марта 2011

Из ссылки :

def render_haml(code)
    engine = Haml::Engine.new(code)
    engine.render
end

Это запускает новый движок Haml и отображает его.

4 голосов
/ 10 октября 2013

У Хамла теперь есть метод capture_haml, который вы можете использовать для достижения этой цели.

  def some_helper
    capture_haml do
      .some_class
        = yield
      #some-code-after
    end
  end

some_helper do
  %h1 Hello World
end
=> <div class="some_class">
     <h1>Hello World</h1>
   </div>
   <div id="some-code-after"></div>

Вот ссылка с дополнительной информацией о capture_haml: http://haml.info/docs/yardoc/Haml/Helpers.html#capture_haml-instance_method

3 голосов
/ 31 марта 2011

Если все, что вам нужно, это метод для небольших повторно используемых фрагментов, как насчет частичных с локальными переменными?http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

...