我有一个包含许多模块的页面,这些模块具有可变部分,例如页眉、子标题、页脚、正文和 ID。我首先创建了一个布局并使用局部变量和一个主块来渲染布局以填充模板。
布局:
.container{:id => local_assigns[:id].present? ? id : nil}
.header
= title
= subtitle
.body
= yield
.footer
= footer
看法:
= render :layout => "shared/example", :locals => {:title => 'Heading', :subtitle => 'Sub heading', :footer => 'closing part'} do
body of the template
这很好用,但现在我想为副标题和页脚传递块,记住在一个页面中会有多个这种布局的实例。到目前为止,我能够解决这个问题的唯一方法是使用capture_haml
助手
以 Haml 作为局部变量查看:
- exampleSubtitle = capture_haml do
%h3 subtitle
%button action
= render :layout => "shared/example", :locals => {:title => 'Heading', :subtitle => exampleSubtitle, :footer => 'closing part'} do
body of the template
为了澄清这个问题,这个例子被简化了一点。在实践中,我担心:locals
散列会增长到“对 Haml 来说很难看”的大小,并希望尽可能防止这种情况发生。
有什么方法可以定义上下文内容块以保持清洁?
一厢情愿的看法:
= render :layout => "shared/example", :locals => {:title => 'Heading'} do
- content_for :subtitle do
%h3 subtitle
%button action
- content_for :footer do
%a{href => "#top"} top
body of the template
如意布局:
.container{:id => local_assigns[:id].present? ? id : nil}
.header
= title
- if content_for?(:subtitle)
= yield :subtitle
.body
= yield
- if content_for?(:footer)
.footer
= yield :footer