使用HAML在Rails3中嵌套渲染部分

时间:2014-01-09 04:14:05

标签: ruby-on-rails haml

我正在尝试以下

的HAML模板
#whitepanelMID
  #groups_view_scroller
    = render 'show' do
      = render 'short_field', locals: {label: 'Name:', value: @group.name}
      = render 'short_field', locals: {label: 'Description:', value: @group.description}

部分是_show.html.haml(注意使用 yield

%table#vert_table.no_borders{ cellpadding: '0', cellspacing: '0'}
  %tbody
    %tr
      %td{ cols: 2 } My table
    = yield

和_short_field.html.haml

%tr
  %th.vert_table_heads= label
  %td= value

问题是产量似乎不起作用。

在HAML的render中使用阻止的正确方法是什么?

更新

我找到了解决方法,我不喜欢。

在HAML模板中捕获输出,如

#whitepanelMID
  #groups_view_scroller
    - rows = capture_haml do
      = render partial: 'short_field', locals: {field_label: 'Name:', value: @group.name}
      = render partial: 'short_field', locals: {field_label: 'Site:', value: @group.site.description}
    = render partial: 'show', locals:{ content: rows}
    %br/

修改后的部分_show.html.haml带有content变量而不是yield

%table#vert_table.no_borders{ cellpadding: '0', cellspacing: '0'}
  %tbody
    %tr
      %td{ cols: 2 } My table
    != content

很高兴听到更好的方法!

1 个答案:

答案 0 :(得分:4)

仅仅因为@vidaca提供的链接是ERB,我想发布HAML的等价物。

使用包装器模板时使用layout:

#whitepanelMID
  #groups_view_scroller
    = render layout: 'show', locals:{ table_title: 'My table'}
      = render partial: 'short_field', locals: {field_label: 'Name:', value: @group.name}
      = render partial: 'short_field', locals: {field_label: 'Site:', value: @group.site.desccription }        
    %br/

和_show.html.haml部分(包装)喜欢

%table#vert_table.no_borders{ cellpadding: '0', cellspacing: '0'}
  %tbody
    %tr
      %td{ cols: 2 }= table_title
    = yield

包装的部分(在这种情况下为short_field)按原样工作。

希望帮助某人。