如果您了解Rails的资产管道,就会知道默认行为是将清单中包含的所有JavaScript文件合并成一个大而笨重、不幸的文件。
ALL THE JAVASCRIPT -> application.js
这意味着如果你有一个JavaScript文件foo.js,它不仅会对被控制器foo访问的页面进行激活,而且还会对所有其他页面进行激活。
这很容易解决,但我想知道最好的方法是什么。
我最初使用JavaScript标签使application.html.erb向我的应用程序传递当前的控制器和操作。
<%= 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();
}
虽然我显然需要遵循我的老板的指示,但我对如何处理未来的应用程序感到矛盾。我认为我的方法比建议的方法更具表现力和灵活性,但我可能会忽略一些关键缺陷。
您对这两种做法有什么看法,无论是单独还是相互之间,并为什么?解决同一问题的更好方法可能是什么?