在我的rails 3.1应用程序中,我有为每个控制器中的每个操作加载的特定文件,例如用户#index requires和index.js以及index.css文件,而用户#show需要show.js和show.css文件等。
然而,当我运行rake资产:预编译时,所有内容都会变成一个大的application.css和application.js文件,并且它会让我的观点变得非常糟糕。有没有办法,除了做" config.assets.precompile + =%w(index.js show.css)"使用rake资产时避免这种行为的方法:预编译?我是否必须以不同的方式构建和命名我的文件?
答案 0 :(得分: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%不好的做法。
答案 1 :(得分:0)
猜测我会说包含文件的顺序搞砸了。
你通常想要的是你的mamisfest中的任何样板代码,然后是你自己的站点范围的表,然后是动作表。
所以你的application.css可能如下所示:
/*
*= require reset
*= require formtastic
*= require jquery-ui
*= require formtastic_overrides
*= require site
*= require_tree .
*/
另一件可能搞砸的事情是在相关文件中应用广泛的规则(例如p{color:green}
),并期望只为该操作提供服务。
这不是管道的工作方式,如果您正在尝试实现这些目标,则需要为这些视图应用更具体的规则。
就个人而言,我不会使用所有这些生成的文件。我更喜欢把我的CSS放在几个文件中,所以我可以在(大多数)一个地方看到它。我发现更容易管理,但YMMV!