Rails特定于页面的JavaScript:什么是最佳实践?
Rails page-specific JavaScript: What's the best practice?
了解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();
}
虽然我显然被期望遵循老板的指示,但我对在未来的应用程序中应该如何处理这一点感到矛盾。我认为我的方法比建议的更具表现力和灵活性,但我可能遗漏了一些关键的缺陷。
你如何看待这两种做法,它们各自的做法和相互之间的做法,为什么?有什么更好的方法来解决这个问题吗?
这都是个人喜好的问题:
-
处理dom中存在的所有元素,不管控制器/动作是什么。
-
基于控制器/动作做更有针对性的javascript逻辑。比如给一个特定的按钮添加一个点击事件,这个事件只出现在这个控制器和这个动作中。
您很可能需要在应用程序中解决这两种情况。
另一种不同的方法,更适合您的行,将controller_name和action_name作为类添加到body标记上<body class="<%= controller_name %> <%= action_name %>">
然后在你的文档中ready检查是否存在一个类:$("body").hasClass("mycontroller");
这将消除你的老板对不必要变量的抱怨。
在http://railsapps.github.io/rails-javascript-include-external.html#external上有一些关于如何实现这一点的信息。那篇文章的一个建议是使用Paloma宝石。
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 什么's是连接供应商js文件的最佳方式
- 什么's是在javascript中迭代项的最佳方式
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 在node.js中编写单元测试的最佳方式是什么
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 什么'这是加载jQuery的最佳方式
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 在AngularJS中使用多个主题的最佳方式是什么
- 什么'是在HTML5画布中创建关键事件的最佳方式
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用JavaScript随机给网页上的每个字母上色的最佳方式是什么
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么