【问题标题】:Add Class To Body Using ERB In A View - Rails在视图中使用 ERB 将类添加到正文 - Rails
【发布时间】:2012-12-21 19:19:22
【问题描述】:

我看过this screencast 在视图中添加页面标题,有没有办法我可以做同样的事情,但在 body 标签中添加一个类?

【问题讨论】:

  • jQuery? $('body').addClass('mysexyclass');
  • 我真的不想在视图中包含脚本

标签: ruby-on-rails ruby erb


【解决方案1】:

不确定你的意思,你可以这样做:

在视图中:

<% content_for :body_class, "my_class" %>

在布局文件中:

<body class="<%= yield (:body_class) %>">

【讨论】:

  • 有没有办法在其他页面上阻止&lt;body class&gt;
  • 不确定 ERB 中是否真的有一种优雅的方法。不太优雅的方法是在 body 标记内进行辅助调用,并返回整个 body 类(“my_class”)和“class”属性。请注意,如果没有设置任何值,yield(:body_class) 调用将返回一个空字符串,因此您可以检查它。
  • @user1919937 由于其他页面上的 ,我从未对这种方法感到满意。请参阅下面的方法。
【解决方案2】:

我通常为这样的东西创建一个辅助方法,这样你就可以干净地设置默认值

application_helper.rb
  def body_class(class_name="default_class")
    content_for :body_class, class_name
  end


view:
  <% body_class "foo" %>

application.html.erb
  <body class="<%= yield (:body_class) %>">

【讨论】:

    【解决方案3】:

    有时我们会使用当前控制器名称作为类名:

    <body class="<%= controller.controller_name %>">
    

    我觉得这更简单,也更优雅一些,但是当然你不能分配单独的类名。

    s。 Add Class To Body Using ERB In A View - Rails

    【讨论】:

      【解决方案4】:

      在布局页面中:

      <% if content_for?(:body_class) %>
        <body class="<%= content_for(:body_class) %>" >
      <% else %>
       <body>
      <% end %>
      

      在内容页面中:

      <% content_for :body_class do  'my-body-class' end %>
      

      【讨论】:

        【解决方案5】:

        我在我的应用程序中使用了接受的方法有一段时间了,但从来没有真正喜欢它的工作原理,因为如果没有类,你的身体标签上就会有 class=' ',乱扔你的代码.对于我当前的用例,我只想要一个宽屏类(但您可以根据您的用例轻松获得更高级的不同类)。我对这种方法很满意:

        在您的应用程序助手中:

        def body_tag(&block)
          content = capture(&block)
          content_tag(:body, content, class: @widescreen ? "widescreen" : nil)
        end
        

        在 application.html.erb 中

        <%= body_tag do %>
          <%# the rest of your content here %>
        <% end %>
        

        然后在您的应用程序控制器中:

        private
          def enable_widescreen
            @widescreen = true
          end
        

        然后在您想要的任何控制器中,只需执行以下操作:

        before_action :enable_widescreen
        

        然后,如果您想将其用于“宽屏”以外的其他类,请随意使类逻辑更高级 - 但关键是这是一种优雅的方式,如果您不这样做,则允许没有类t指定一个,没有

        <body class>
        

        显示在您的 html 中。

        【讨论】:

          【解决方案6】:

          我更喜欢使用以下方法:

          &lt;body class="&lt;%= content_for?(:body_class) ? yield(:body_class) : controller_name %&gt;"&gt;

          该方法避免了可怕的&lt;body class&gt;

          我经常使用控制器名称来限定多种样式,因此如果我只需要一个类,就不需要在每个视图上都提供 content_for。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多