Var*_*rac 6 javascript jquery ruby-on-rails
任何了解Rails资产管道的人都知道,清单中包含的所有JavaScript文件的默认行为都会被归入一个大的,笨拙的,不幸的球.
ALL THE JAVASCRIPT -> application.js
Run Code Online (Sandbox Code Playgroud)
这意味着如果你有一个JavaScript文件foo.js,它不仅会激活控制器foo到达的页面,还会激活每个其他页面.
这很容易解决,但我想知道最好的方法是什么.
我最初让application.html.erb使用JavaScript标记将当前控制器和操作传递给我的应用程序中的JavaScript.
<%= javascript_tag do %>
window.givenController = "<%= controller_name %>";
window.givenAction = "<%= action_name %>";
<% end %>
Run Code Online (Sandbox Code Playgroud)
在我的js文件中,我将使用这种if语句在控制器命名文件上包含特定于页面的代码,以确保它们仅在这些页面上运行.
if(givenController == "foo" && givenAction == "bar"){
doStuff();
}
Run Code Online (Sandbox Code Playgroud)
我的老板认为这会创建不必要的变量,而是建议我使用if语句指向页面上的特定JQ元素:
if($("#some-element-in-foo").length > 0){
doStuff();
}
Run Code Online (Sandbox Code Playgroud)
虽然我显然希望遵循我老板的指示,但我对如何在未来的应用程序中解决这个问题感到矛盾.我认为我的方法比建议的更具表现力和灵活性,但我可能会遗漏一些关键缺陷.
您如何看待这两种做法,无论是自己还是彼此,以及为什么?有什么可能是解决同样问题的更好方法?
这完全取决于偏好:
处理 dom 中存在的所有元素,无论控制器/操作如何。就像将 javascript 事件应用于整个应用程序中存在的导航元素一样。
基于controller/action做更有针对性的javascript逻辑。就像向特定按钮添加单击事件一样,该按钮仅显示在该控制器和该操作中。
您很可能需要在应用程序中解决这两种情况。
另一种不同的方法,更多的是你的方法,是将controller_name和action_name添加为body标签上的类
<body class="<%= controller_name %> <%= action_name %>">
然后在文档中检查是否存在类:
$("body").hasClass("mycontroller");
这将消除你的老板对不必要的变量的抱怨。
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |