[英]Add Class To Body Using ERB In A View - Rails
不确定你的意思,你可以这样做:
在一个视图中:
<% 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 %>">
我发现这更简单,更优雅,但当然你将无法分配单独的类名。
在布局页面中:
<% 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.