任何知道Rails资产管道的人都知道,默认行为是将包含在清单中的所有JavaScript文件都卷入一个大的,笨拙的,不幸的球。Rails页面特定的JavaScript:最佳实践是什么?
ALL THE JAVASCRIPT -> application.js
这意味着,如果你有一个JavaScript文件foo.js下,会激活不仅由控制器FOO达到的网页,同时也为所有其他网页。
这很容易解决,但我不知道什么是最好的方法来做到这一点。
我最初有application.html.erb使用JavaScript标记在我的应用程序中将当前控制器和动作传递给JavaScript。
<%= javascript_tag do %>
window.givenController = "<%= controller_name %>";
window.givenAction = "<%= action_name %>";
<% end %>
在我的js文件,然后,我会围绕命名文件控制网页的特定代码与这种if语句,以确保它们只运行在这些页面。
if(givenController == "foo" && givenAction == "bar"){
doStuff();
}
我的老板认为,这造成不必要的变量和建议,而不是我用if语句指向网页上的特定JQ元素:
if($("#some-element-in-foo").length > 0){
doStuff();
}
,而我显然有望跟随我的老板的方向,我对我在未来的应用程序中如何处理这个问题存在争议。我认为我的方法比表达方式更具表现力和灵活性,但我可能会错过一些关键缺陷。
您是如何看待这两种做法,无论是由他们自己还是彼此之间的关系,为什么?什么可能是解决同样问题的一些更好的方法?
另一种选择是使用数据属性而不是类。我认为将数据控制器和数据操作添加到body标签而不是类会更简单。 – elevine
另外一个不错的选择@elevine。我通常在控制器目标css声明的body标签上也有这些类,所以在我的情况下它会杀死两只鸟。 –