Простейший возможный частичный синтаксис с передачей локальных переменных с помощью haml

Я новичок в Ruby/HAML и пытаюсь упростить частичный синтаксис для своих простых требований. Например, я хочу создать партиал, который будет передавать переменные для вывода следующего HTML:

<figure class="foo">
  <img src="path/to/img.png" />
  <figcaption>caption text here</figcaption>
</figure>

Я хочу создать помощника, чтобы получить частичный синтаксис к чему-то приближающемуся:

@(figure).foo {
  img: "path/to/img.png",
  caption: "caption text here"
}

Возможен ли такой простой синтаксис? Есть ли лучший подход?


person Tom Genoni    schedule 11.06.2012    source источник


Ответы (1)


Конечно:

figure_helper(:foo, 'path/to/img.png', 'caption text here')

Затем в вашем вспомогательном файле:

def figure_helper(cls='default_cls', img='rails.png', caption='uh oh! forgot caption!')
<<STMT
  <figure class="#{cls}">
    <img src="#{img}" />
    <figcaption>#{caption}</figcaption>
  </figure>
STMT
end

Примечание. Если вы не знакомы с синтаксисом оператора здесь для определения строк, убедитесь, что закрывающий <<STMT начинается в 1-м столбце.

В ирб:

1.9.2p0 :016 > def figure_helper(cls='default_cls', img='rails.png', caption='uh oh! forgot caption!')
1.9.2p0 :017?>   <<STMT
1.9.2p0 :018">   <figure class="#{cls}">
1.9.2p0 :019">     <img src="#{img}" />
1.9.2p0 :020">     <figcaption>#{caption}</figcaption>
1.9.2p0 :021">   </figure>
1.9.2p0 :022"> STMT
1.9.2p0 :023?>   end
 => nil 
1.9.2p0 :025 > puts figure_helper(:foo, 'path/to/img.png', 'caption text here')
  <figure class="foo">
    <img src="path/to/img.png" />
    <figcaption>caption text here</figcaption>
  </figure>
 => nil 
person Anil    schedule 11.06.2012
comment
Спасибо, это полезно. Не могли бы вы показать мне, как будет выглядеть вспомогательный код? И если бы некоторые переменные были необязательными, как бы хелпер справился с этим? - person Tom Genoni; 11.06.2012