仅在特定操作中启用js函数
Enable a js function only in certain actions
通过这个问题,我学会了一种聪明的技巧,只在某些页面上包含外部脚本。
但我知道会遇到一个后续问题:引用该脚本的函数(包含在//= require_tree .
中)会在所有其他页面(不包含外部脚本的页面)上导致错误。
在Rails中,我应该把一个函数放在哪里(或者如何编写它),它引用的外部脚本只包含在将要使用它的页面(操作)中,这样它就不会在所有其他页面上产生错误
我也在寻找这个问题的答案很长一段时间了。
最后,我意识到:
-
我喜欢资产管道,我不想自己处理资产。所以我尽我所能让我所有的js文件都用资产管道处理
-
使用content_for可以非常方便地在只需要特定视图的地方包含js:
在布局文件(layouts/application.html.erb)上执行
<%= yield :scripts %>
<head>
标签内部
然后在你的特定视图上写
<% content_for :scripts do %>
<script>
you js code goes here regularly
</script>
<% end %>
那么rails就会知道要接受这一点并将其放入:脚本这将确保您的js位只有在您真正需要时才加载
如果您想要它的特定文件:
将这些文件放在assets/javascript下的一个文件夹中。让我们称之为Others
在Others
中放置yourjs.js
文件,在application.js
清单中不包括该树
现在,链轮将不接受Others
中的文件。
然后你可以使用上面的方法content_for
来包括特定的文件
<% content_for :scripts do %>
<%= javascript_include_tag "Others/yourjs.js" %>
<% end %>
在Rails中有gem
Paloma处理页面特定的javascripts
。
快速示例:
The javascript callback file /assets/javascripts/paloma/users/new.js: Paloma.callbacks['users']['new'] = function(params){ // This will only run after executing users/new action alert('Hello New Sexy User'); }; The Rails controller app/controllers/users_controller.rb: def UsersController < ApplicationController def new @user = User.new # No special function to call, the javascript callback will be executed automatically # just for this specific action. end end
无需在视图中检查控制器和操作。将控制器和操作作为类添加到body标记中。然后在javascript代码中,使用if条件检查这些属性并运行脚本。
这可能不是最优雅(或最有效)的方式,但在这种情况下,我会在布局中添加javascript_include_tag
之前检查控制器和操作。示例:
<% if :controller == 'maps' && :action == 'show' %>
<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js" %>
<% end %>
- 淘汰赛.JS'启用'长度绑定条件不起作用
- 检查浏览器'在asp.net的后端代码中启用或禁用了s JS
- 如何在angular js中启用CORS
- 在iOS上使用iScroll.js时启用缩放功能
- 在 Angular JS 中重新启用禁用 ng 的按钮
- 如何在启用ES6功能的情况下运行Node.js应用程序
- 如何通过js启用/禁用浏览器历史记录
- JS - jQuery - 启用禁用表单字段复选框
- 通过JS功能在中继器中启用文本框
- 有没有办法在 Servlet 中知道 JS 是否在浏览器上启用
- 有没有办法知道 .net 必填字段验证器是否从 js 启用或禁用
- Twitter Bootstrap 使可折叠菜单链接不可点击(如果启用了 JS)
- 为什么我的 JS 没有启用我的按钮
- 动态按钮启用基于错误组的挖空 js
- 如何模拟启用JS的浏览器
- 仅在特定操作中启用js函数
- 启用JS评测时,JavaScript代码工作得更快?什么
- 启用js文件时,联系人表单不会发送所有表单详细信息
- 使用Laravel测试时是否启用JS
- 隐藏并启用 js 中具有相同类名的 Div 集