2012-05-10 45 views
1

在我的rails 3.1應用程序中,我具有要爲每個控制器中的每個操作加載的特定文件,例如, users#index requires和index.js和index.css文件,而用戶#show需要一個show.js和show.css文件等。鐵路資產管道和頁面特定文件

但是,當我運行rake assets:precompile時,所有東西都變成了一個大的應用程序.css和application.js文件,它讓我的看法大行其道。有沒有辦法,除了做「config.assets.precompile + =%w(index.js show.css)」方法來避免使用rake資產時的這種行爲:precompile?我必須以不同的方式組織和命名我的文件嗎?

回答

2

我通過在我的CSS和JavaScript中應用適當的作用域解決了這個問題。例如。我的佈局文件的body標籤被賦予了動態ID通過以下方式:

<body id="<%= "#{params[:controller]}-#{params[:action]}" %>" data-controller=<%= params[:controller] %> data-action=<%= params[:action] %>> 

而且在我users_index.css文件,這一行動是作用和使用風格:

body#users-index { .. } 

我的CSS清單這樣長相像這樣:

/* 
*= require self 
*= require jqueryUi 
*= require_tree . 
*/ 

至於JavaScript中,我執行以下操作:

APP = { init: function() { ... }, 
     users = { 
        index: function() { 
          //jQuery bindings here; 
        }, 
        show: function() { 
         //More jQuery bindings here for this action; 
        } 
     } 
     } 

現在,當頁面加載,我做到以下幾點:

(function() { 
    action = $("body").data("action"); 
    controller = $("body").data("controller"); 
    APP.init(); 
    APP[controller][action](); 
      })(); 

一種變通方法的位,但我看到保羅的愛爾蘭和他的夥伴們做的JavaScript的事情,我看到瑞恩·貝茨從RailsCasts做CSS方法,所以我想它不能是100%不好的做法。

0

在猜測我會說,文件包括的順序是搞砸了事情。

您通常需要的是任何樣板代碼,首先在您的mamisfest中,然後是您自己的網站範圍工作表,然後是最後的操作表。

所以你application.css可能是這樣的:

/* 
*= require reset 
*= require formtastic 
*= require jquery-ui 
*= require formtastic_overrides 
*= require site 
*= require_tree . 
*/ 

可能被搞亂這件事被廣泛應用規則的其他事情(如p{color:green})在相關文件中,並期望中投放的就是那個動作。

這不是管道的工作方式,如果這是您要實現的目標,您需要爲這些視圖應用更具體的規則。

個人而言,我不使用所有這些生成的文件。我更喜歡把我的CSS放在幾個文件中,以便我可以在一個地方看到它(大部分)。我覺得更容易管理,但YMMV!