Rails -将视图的javascript代码移动到javascript文件中
Rails - Move view's javascript code to javascript files
首先让我告诉你,我已经搜索了这个问题,并没有设法找到任何答案。
我有很多Javascript在我的布局/应用程序。html。haml文件:
### at the end of application.html.haml file
- if @instance_variable.condition
:javascript
// a lot js/jQuery code
:javascript
// more js code that uses #{ @instance.vars }
- if @another_condition.using.ruby.cody
:javascript
// more js code that uses #{ @instance.vars }
我在这段代码中使用实例变量,这意味着这些变量只会在控制器(应用程序控制器)上声明。由于这是应用程序的布局,这些脚本在我网站的每个页面上运行(这当然是我需要的)。
我想要的是移动所有这些代码到一个js。动词文件(如果可能,或.haml)。首先,因为在单独的文件中管理这些代码更容易;第二,因为我不想在每个html文件的末尾都有<script> // a lot of js code </script>
标签,所以我只想有一个<script async src='link'/>
标签。
我也包括已经在文件开始的application.coffee
,但我需要这个脚本标签在html文件的末尾。
我不建议使用偏号。因为,你的代码使用变量,这意味着它的变化取决于你的变量。如果你把它们放到一个单独的javascript文件中,浏览器将不知道这些变化,并使用缓存文件。一种解决方法是在文件名的末尾添加一些字符串(当vars更改时更改),但是这样一来,您将失去将javascript移动到单独文件中的所有好处。
一个更好的方法是在你的application.html.haml
中定义变量,将你的javascript代码移出到单独的文件中,只使用定义的变量。
application.html.haml
- if @instance_variable.condition
%script(src="path/to/my/script.js")
:javascript
= var some_var = #{@instance.vars}
%script(src="path/to/my/second_script_that_uses_var.js")
乌兹别克,谢谢你的回答,但经过一番研究,我找到了一种方法来做我想要的:)
在我的'layouts/application.html。我添加了一个脚本标签:
### at the end of application.html.haml file
%script{async: 'async', src: application_scripts_path}
然后我将这个路径添加到routes:
get 'application_scripts' => 'controller#application_scripts', as: :application_scripts
然后我只需要在控制器上设置这个动作application_scripts
并创建一个新视图(app/views/controller/application_scripts .js.erb):
class Controller < ActionController::Base
# 1
protect_from_forgery except: :application_scripts
def application_scripts
# 2
if condition.that.tells.me.this.request.is.valid
# 3
render formats: [:js] and return
end
render plain: ''
end
这些步骤当然是比较难找到的:
- 1 -我必须禁用此保护,否则我会得到这个错误:
ActionController::InvalidCrossOriginRequest at/application_scripts
安全警告:另一个站点的嵌入标签请求受保护的JavaScript。如果你知道自己在做什么,请禁用此操作的伪造保护,以允许跨域JavaScript嵌入。
- 2 -为了确保没有其他网站可以请求这个脚本文件(不是说它对我来说可能是一个问题,但我更喜欢这种方式),我添加了一个条件,确保请求来自我的网站。在这种情况下,我只是检查用户是否已登录。
- 3 -
formats: [:js]
告诉Rails视图不是。html,而是一个。js文件'application_scripts.js.erb'
最后,我只需要将所有代码从application.html.haml文件移到视图文件'application_scripts.js中。Erb '和从haml代码转换为Erb。
<% @instance_variable.condition %>
// a lot js/jQuery code
// more js code that uses <%= @instance.vars %>
<% @another_condition.using.ruby.cody %>
// more js code that uses <%= @instance.vars %>
<% end %>
<% end %>
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- JavaScript代码问题:我正在将对象转换为数组
- Javascript阻止其他Javascript代码
- 使用键代码移动画布-JAVASCRIPT
- 是否可以将此javascript代码(或其中的一部分)移动到单独的文件中,而不是内联
- 将JavaScript代码从剪贴板粘贴到移动浏览器中–Android
- 如何使用 javascript 代码更改 jquery 移动单选按钮组
- 将内联 Youtube API JavaScript 代码移动到单独的文件
- 从文件顶部移动javascript代码,可能使用设计模式
- 尝试实现鼠标移动到这个基本的javascript代码
- 从同一设备上运行的html或javascript代码/页面调用已安装的移动facebook应用程序(任何平台androi
- 如何“轻松”地做到为移动平台生成完美的Javascript代码
- 只在移动设备上禁用某些javascript代码
- 如何从javascript代码获得android移动UDID
- Javascript代码从内联文件移动到外部文件时会产生错误
- Rails -将视图的javascript代码移动到javascript文件中
- 为什么获胜't将Javascript代码从html移动到外部js文件后即可工作
- asp.net mvc-在IE11移动浏览器中未定义的Javascript代码,但可在Chrome、Firefox、IE