1

在我的 rails 3.1 应用程序中,我有要为每个控制器中的每个操作加载的特定文件,例如 users#index 需要和 index.js 和 index.css 文件,而 users#show 需要 show.js 和 show.css 文件等.

但是,当我运行 rake assets:precompile 时,所有内容都会被合并到一个大的 application.css 和 application.js 文件中,这让我的观点大打折扣。除了在使用 rake assets:precompile 时执行“config.assets.precompile += %w(index.js show.css)”方法来避免这种行为之外,还有其他方法吗?我必须以不同的方式组织和命名我的文件吗?

4

2 回答 2

2

我通过在我的 CSS 和 JavaScript 中应用适当的范围解决了这个问题。例如,我的布局文件的主体标签以下列方式被赋予一个动态 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 . 
*/

可能会搞砸的另一件事是p{color:green}在关联文件中应用广泛的规则(例如 ),并期望仅针对该操作提供该规则。

这不是管道的工作方式,如果这是您想要实现的目标,您将需要为这些视图应用更具体的规则。

就个人而言,我不使用所有这些生成的文件。我更喜欢将我的 CSS 放在几个文件中,这样我就可以在(大部分)一个地方看到它。我发现这更容易管理,但 YMMV!

于 2012-05-13T01:56:55.023 回答