繁体   English   中英

在视图中使用ERB将类添加到正文 - Rails

[英]Add Class To Body Using ERB In A View - Rails

我看过这个截屏视频 ,在视图中添加页面标题,有没有办法可以做同样的但是添加一个类的body标签?

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

在一个视图中:

<% content_for :body_class, "my_class" %>

在布局文件中:

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

我通常为这样的东西做一个帮助方法,所以你可以干净地设置默认值

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) %>">

有时使用当前控制器名称作为类名称,我们将执行:

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

我发现这更简单,更优雅,但当然你将无法分配单独的类名。

秒。 在视图中使用ERB将类添加到正文 - Rails

在布局页面中:

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

在内容页面中:

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

我已经在我的应用程序中使用了已接受的方法一段时间了,但从来没有真正喜欢它是如何工作的,因为如果没有课程,那么你的身体标签上就会有那个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

如果你想将它用于除“宽屏”之外的不同类,那么随意使类逻辑更高级 - 但关键是这是一种优雅的方式,如果你没有指定一个类就不允许它成为一个类没有

<body class>

出现在你的HTML中。

我更喜欢使用以下方法:

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

该方法避免了可怕的<body class>

我经常使用控制器名称来定义一些样式,所以如果我只需要那个类,那么不需要在每个视图上提供content_for是很好的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM