1

Rails 3.1アプリには、各コントローラーのアクションごとに読み込まれる特定のファイルがあります。たとえば、users#indexrequiresとindex.jsおよびindex.cssファイル、users#showにはshow.jsおよびshow.cssファイルなどがあります。 。

ただし、rake Assets:precompileを実行すると、すべてが1つの大きなapplication.cssファイルとapplication.jsファイルにまとめられ、ビューがめちゃくちゃになります。「config.assets.precompile+=%w(index.js show.css)」を実行する以外に、rake Assets:precompileを使用するときにこの動作を回避する方法はありますか?ファイルの構造と名前を変える必要がありますか?

4

2 に答える 2

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]();
          })();

少し回避策がありますが、Paul Irishと彼の仲間がJavaScriptを実行し、RailsCastsのRyan BatesがCSSメソッドを実行するのを見たので、100%悪い習慣になることはないと思います。

于 2012-06-27T04:09:26.453 に答える
0

推測では、ファイルが含まれている順序は混乱していると思います。

一般的に必要なのは、最初にmamisfestの定型コード、次にサイト全体のシート、最後にアクションシートです。

したがって、application.cssは次のようになります。

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

これを台無しにする可能性のあるもう1つのことはp{color:green}、関連付けられたファイルに広範なルール(たとえば)を適用し、それがそのアクションに対してのみ提供されることを期待することです。

これはパイプラインの仕組みではありません。それを実現しようとしている場合は、これらのビューに対してより具体的なルールを適用する必要があります。

個人的には、生成されたファイルをすべて使用するわけではありません。私はCSSをいくつかのファイルに入れて、(ほとんど)1か所で確認できるようにすることを好みます。管理は簡単ですが、YMMVです。

于 2012-05-13T01:56:55.023 に答える