Варианты использования для различных помощников Padrino Haml

StackOverflow https://stackoverflow.com/questions/4755526

  •  15-10-2019
  •  | 
  •  

Вопрос

Я читаю http://www.padrinorb.com/guides/application-helpers Но мне неясно, каковы варианты использования для каждого из помощников взгляда. В частности, как делать content_for/yield_content, render/partial, capture_html, and concat_content Все сочетаются друг с другом?

Прямо сейчас я использовал render 'my/view' в моих контроллерах и бросаю в некоторые =partial 'my/partial' в пределах 'my/view' Просто чтобы разорвать основной файл шаблона на небольшие куски.

Правильный способ сделать это? И когда/где я хотел бы использовать другие вспомогательные функции?

Это было полезно?

Решение

Давайте пройдемся через варианты использования.

  1. content_for/helipt_content

Это для введения контента в файл макета, который может быть полезен. Примером является добавление дополнительных CSS/сценариев в макет из другого шаблона. Пример в руководстве тот же, показывающий, как добавить файлы CSS в ваш макет из любого шаблона, который требует. Вы также можете использовать его для добавления контента на боковые панели, дополнительные ссылки и т. Д. Именно для вещей, которые не требуют их собственного шаблона, но необходимо передавать информацию обратно в макет на основе отображаемого представления.

  1. рендер/частично

Рендер предназначен для показы данного шаблона, связанного с маршрутом. рендеринг должен использоваться для основных действий после обработки маршрута. Частичный похож на «метод» в представлении. Это может быть использовано повторно, и переменные могут быть переданы, чтобы изменить выход. Вы используете частичные в основных шаблонах, чтобы разрушить код и повторно использовать кусочки представлений, которые в противном случае могут показаться избыточными.

  1. capture_html/concat_content

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

# template.haml
# NOTE the equals so the content is returned 
# and added to the view directly
= div_wrapper do 
  %h1 Some heading
  %p This is now wrapped in a div

Чтобы реализовать это и использовать его в шаблоне, вы должны быть в состоянии «захватить» HAML, проходящий в блок, чтобы обработать, а затем обернуть его. Вот где появляется capture_html:

def div_wrapper(&block)
   nested_content = capture_html(&block)
   content_tag(:div, nested_content)
end

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

# template.haml
# NOTE the dash so the content is not outputted directly
- div_wrapper do 
  %h1 Some heading
  %p This is now wrapped in a div

Но это также работает у других помощников:

# some_helper.rb
def example(name)
  div_wrapper { "<h1>Test</h1>" }
end

Чтобы правильно распечатать обернутый содержимое от помощника как в шаблоне, так и в прямой рубине, мы можем использовать concat_content и проверить, нужно ли нам «заключить» результат в шаблоне или просто вернуть его.

 def div_wrapper(&block)
   nested_content = capture_html(&block)
   tag_result = content_tag(:div, nested_content)
   block_is_template?(block) ? concat_content(tag_result) : tag_result
end

Я надеюсь, что это работает как базовый обзор. Функции могут перекрываться, но обычно становится ясно, когда использовать, что на основе конкретного контекста.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top