代码之家  ›  专栏  ›  技术社区  ›  Kevin Sylvestre

对高级Rails布局嵌套的困惑

  •  1
  • Kevin Sylvestre  · 技术社区  · 14 年前

    我目前有一些布局,我的应用程序使用 ... 所有布局之间相同):

    # application.html.erb
    ...
    <div id="section"><div class="wrapper"><%= yield %></div></div>
    ...
    
    # wide.html.erb
    ...
    <div id="section" class="wide"><div class="container-12"><%= yield %></div></div>
    ...
    
    # thin.html.erb
    ...
    <div id="section" class="thin"><div class="container-06"><%= yield %></div></div>
    ...
    

    我希望重新调整代码的因子以减少重复,但是类变量的奇怪放置(在yield之外)使它变得困难。我应该使用变量在布局中声明类值(并移动到单个布局)还是添加 container.html.erb 包含副本的布局 ... 然后呈现三个其他布局从它(或另一个第三个选项存在,我丢失)?如果可能的话,我正在寻找“Rails”的方法。谢谢!

    2 回复  |  直到 14 年前
        1
  •  3
  •   zetetic    14 年前
    module ApplicationHelper
      def section_helper(outer_class=nil,inner_class)
        content_tag(:div, :class=> outer_class, :id => :section) do
          content_tag(:div, :class=> inner_class) do
            yield
          end
        end
      end
    end
    

    在布局中:

    <%= section_helper("wrapper") { yield } %>
    <%= section_helper("wide","container-12") { yield } %>
    <%= section_helper("thin","container-06") { yield } %>
    

    这对于第一个没有“outer”类的情况很好,因为 :class => nil 什么都不呈现。但是,如果有一个可选的第一个参数令人困惑,也可以传入一个散列。

        2
  •  0
  •   Mike Gorski    14 年前

    我们已经使用@sectionclass这样的实例变量完成了类似的工作。然后在ApplicationController中将其设置为默认值,并将其翻转到其他控制器中的页面特定值。那么你的页面应该是这样的:

    <div id="section" class="<%= @sectionclass %>"><div class="container-12"><%= yield %></div></div>
    

    实例变量的一个优点是nil case以空字符串无声地失败。(尽管有些人可能会说这是“糟糕的”)。