5

我想为我的 Rails 应用程序测试两个不同的接口。理想情况下,我希望有两个单独的 css 文件,一个与每个接口相关联(例如,new_interface.css 和 old_interface.css)。我目前有两种不同的接口部分,一种称为 _new_interface.html.erb,另一种称为 _old_interface.html.erb。如果我想在加载特定视图时调用正确的 css 文件,我该怎么做?例如,如果我加载 _new_interface.html.erb,我希望它加载 new_interface.css 文件并忽略 old_interface.css 文件。

我的应用程序.css:

/*
*= require_tree
*/
4

2 回答 2

6

这个问题似乎是针对你需要做的:Using Rails 3.1 assets pipeline to conditionally use certain css

简而言之,您需要将 app/assets/stylesheet 文件夹重新组织到一些子目录中并更改清单文件,以便在运行时不会将所有内容捆绑在一起。

然后你可以在你的视图中放置一些条件逻辑,以便它为工作加载正确的 css。content_for 标记在这里可能会很有用。您可以编辑 app/views/layouts/application.html.erb 并在其他 javascript <%= yield :view_specific_css %> 之后添加一行。然后在您的视图文件中,您可以使用

<% content_for :view_specific_css do %>
    <%= stylesheet_link_tag "whatever %>
<% end %>
于 2013-03-29T18:49:13.387 回答
3

您应该将它们都保留为 application.css 的一部分并执行以下操作

应用程序.html.haml/erb

body{:class => @old_layout ? "old_layout" : "new_layout"}

然后,当您进行的操作与控制器中的旧布局不符时

@old_layout = true

然后在你的 css 文件中,要么在所有内容前面加上 body.old_layout 或 body.new_layout,要么使用 scss,sass 的一个子集,然后像这样 rap 你当前的 css 文件

body.old_layout{
  #all your old layout css goes here, all but body statements of course
}

body.new_layout{
  #all your new layout css goes here, all but body statements of course
}

这样,您可以使用一个 css 文件使事情变得简单。并且通过一种解决方案,您可以轻松地一次切换每个控制器操作。

于 2013-03-30T06:37:16.280 回答