Мне очень нравится, как миксины Sass позволяют обернуть блок кода настраиваемой оболочкой:
=container($class)
.#{$class}.container
.container-inner
@content
+container(header)
foo: bar
+container(main)
baz: quux
Результирующий CSS:
.header.container .container-inner {
foo: bar;
}
.main.container .container-inner {
baz: quux;
}
Я пытаюсь сделать то же самое с частями Падрино/Мидлмена. Проблема в том, что партиалы не принимают блоки контента (почему?). :(
Я пытался обойти это, передавая блоки контента в content_for
, но последующие использования content_for
добавляли контент, а не заменяли его:
Частичное partials/container.haml
:
.container
= yield_content :container
Страница index.html.haml
:
- content_for :container do
Foo
= partial('partials/container')
- content_for :container do
Bar
= partial('partials/container')
Результирующий HTML:
<div class="container">
Foo
</div>
<div class="container">
Foo
Bar
</div>
Как видите, он дублирует мой контент, что абсолютно неприемлемо. Кроме того, этот способ не позволяет предоставлять аргументы, которые будут использоваться для настройки HTML-оболочки.
Поэтому я подумал о создании помощника. Это позволило бы использовать следующий стиль использования, который более элегантен, чем content_for
, а также поддерживает передачу переменных в блок контента:
= partial_with_content_block('partials/container', class: 'header') do
Foo
= partial_with_content_block('partials/container', class: 'main') do
Bar
Как мне реализовать такой помощник?