如何干燥重复的嵌套 HAML?

How do I DRY up repeated nested HAML?

我正在编写电子邮件视图,它们在使用嵌套表格时特别讨厌。我电子邮件的许多部分中的每一个都希望在它周围出现同样令人讨厌的内容:

%table.centered
  %tbody
    %tr
      %td
        %table.one-col{"emb-background-style" => ""}
          %tbody
            %tr
              %td.column
                %div
                  .column-top  
                %table.contents
                  %tbody
                    %tr
                      %td.padded
                        COPY COPY COPY ETC.

每个部分的内容都是大量的复制和链接等等,将其放入 ruby 字符串或从单独的文件中呈现将很难理解。这是我想隐藏的内容,而不是部分内容。

那么,有没有办法以某种方式连接 cruft 以减少 HAML 的缩进和粗糙?

这可以在不渲染部分的情况下完成。

您可以制作一个这样的辅助方法来隐藏所有 'cruft' 您放置的内容。

# app/helpers/application_helper.rb
def nested_blk_call(&blk)
  content_tag :div, class: "nested-tag-level-1" do
    content_tag :div, class: "nested-tag-level-2" do
      content_tag :div, class: "nested-tag-level-3" do
        blk.call
        ""
      end
    end
  end
end

# some_view.html.haml
= nested_blk_call do
  .you-can-add-more-haml
    COPY COPY COPY ETC.

这将在浏览器中输出

<div class="nested-tag-level-1">
  <div class="nested-tag-level-2">
    <div class="nested-tag-level-3">
      <div class="you-can-add-more-haml">
        COPY COPY COPY ETC.
      </div>
    </div>
  </div>
</div>