2012-04-22 52 views
2

我为每个控制器都有一个单独的scss文件,并且我不会将它们全部导入到application.css文件中,以便可以在布局中包含控制器特定的样式表和js文件。在rails 3.2中预编译控制器资产

所以在布局我做的:

<%= stylesheet_link_tag "application" %> 
<%= stylesheet_link_tag params[:controller], :media => "all" %> 
<%= javascript_include_tag 'application' %> 
<%= javascript_include_tag params[:controller] %> 

但是当我运行耙资产:预编译我没有得到该控制器编制资产。

我在网上寻找解决方案,但他们都表示将所需的文件添加到config.assets.precompile staitment。我不知道该放什么东西,这样应用/资产/样式表子文件夹和app/assets/javascripts的子文件夹中的所有资源都会自动编译。

更新1

OK,我将编译所有的人在一个文件中,但有两个问题:

  1. 我有一个包含所有需要的变量和进口_base.scss文件,并且已将application.css重命名为application.css.scss,以便我可以在将其他文件导入之前导入该文件:

    @import 'base'; 
    @import 'style'; 
    @import 'forms'; 
    

我需要如何使用清单来做到这一点?找不到用scss自己导入整个目录的方法。

  1. 我对不同控制器中的相同选择器有不同的操作。什么是最简单的方式来分开这些行动和定义女巫应该在一个特定的页面上处理?

回答

0

这是一个坏主意,因为它会为每个页面加载添加额外的HTTP请求,需要很多额外的文件(其中大部分将是空的,很少有实际的控制器特定的CSS/JS),并忽略浏览器缓存(缓存application.css/js一次,并忘记它)。

更好的方式是编写您的CSS/JS,以便您可以将它们全部包括在一起并正确使用资产管道。

+0

更新了这个问题的问题。 – Almaron 2012-04-22 08:01:52

+0

我更喜欢有应用程序CSS和JS,然后每个控制器CSS和JS。由于控制器将我的应用程序分割成特定的部分。我不喜欢把我所有的JS和CSS都放到一个文件中。它可以完成,但为什么有所有未使用的选择器和空的jQuery选择器。 – Amala 2013-01-21 03:49:29

2

解决方案:

到文件的config/application.rb中

加入这一行:

config.assets.precompile += ["controller1.js", "controller1.css", "controller2.js", "controller3.js"] 

,并在运行资产下一次:预编译,将编译该文件还

+0

我正在寻找一种方法来自动执行此操作,但无法找到干净的。 – Amala 2013-01-21 03:49:44

0

关于这样的事情:

config.assets.precompile += Dir::entries("app/assets/javascripts"). 
           map{|f| f[/^(?!application\.).*\.js/]}.compact