2012-04-22 48 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