【发布时间】:2012-12-21 19:19:22
【问题描述】:
我看过this screencast 在视图中添加页面标题,有没有办法我可以做同样的事情,但在 body 标签中添加一个类?
【问题讨论】:
-
jQuery?
$('body').addClass('mysexyclass'); -
我真的不想在视图中包含脚本
标签: ruby-on-rails ruby erb
我看过this screencast 在视图中添加页面标题,有没有办法我可以做同样的事情,但在 body 标签中添加一个类?
【问题讨论】:
$('body').addClass('mysexyclass');
标签: ruby-on-rails ruby erb
不确定你的意思,你可以这样做:
在视图中:
<% content_for :body_class, "my_class" %>
在布局文件中:
<body class="<%= yield (:body_class) %>">
【讨论】:
<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
然后,如果您想将其用于“宽屏”以外的其他类,请随意使类逻辑更高级 - 但关键是这是一种优雅的方式,如果您不这样做,则允许没有类t指定一个,没有
<body class>
显示在您的 html 中。
【讨论】:
我更喜欢使用以下方法:
<body class="<%= content_for?(:body_class) ? yield(:body_class) : controller_name %>">
该方法避免了可怕的<body class>。
我经常使用控制器名称来限定多种样式,因此如果我只需要一个类,就不需要在每个视图上都提供 content_for。
【讨论】: