我通过在我的 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% 的坏习惯。