Rails在渲染后强制重新加载javascript
我在我的rails应用程序中使用了一个表单,在我的控制器中最后检查表单的内容是否正常,如果不是我再次渲染页面解释错误
控制器的一部分
if @insertion.save redirect_to @insertion else render 'new' end
在我看来,我有这条线来显示错误。
The form contains .
问题是渲染后页面不会再次加载我的javascript文件,因此视图不像我预期的那样
如何在渲染后强制重新加载js?
由于turbolink,这是我的咖啡文件
$(document).on "turbolinks:load", -> insertionJS = new Insertion() if $('.insertions.show').length > 0 console.log("insertions.show") insertionJS.showJS() .....continue
使用Turbolinks设计JavaScript和CSS不会重新加载,它会将您的链接等转换为XHR请求,然后使用响应更新并触发其特殊事件(也就是为什么jQuery
$(function() { ... });
不能像Turbolinks那样工作。因为它做了一个XHR,它根本不是一个真正的页面加载,即使它看起来像一个Rails控制器。
对于大多数情况,您可以使用turbolinks:load
像您所示的turbolinks:load
事件,但这不是magix解决方案,您必须记住所有“旧”JavaScript和HTML仍然存在,任何JavaScript“全局”都不会被重置,等等。
如果您想在每个页面上重新加载/执行JavaScript,只需从您的应用程序中删除Turbolinks( Gemfile
, application.js
)。 如果为CSS / JS实现适当的缓存头并且没有太多的JS,那么性能差异就不那么大了。
如果您只是出于某种原因想要为特定页面/链接/表单禁用它,可以将data-turbolinks="false"
属性添加到链接中。 请记住,这需要在通向页面的链接上,而不是页面本身。 要使页面本身真正重新加载,你可以像location.reload()
那样做,但请记住,在渲染/重定向后重新加载一个完整的单独页面。
如果你真的想强制JavaScript重新加载,你可以动态地将另一个插入到头部,但是请记住你的原始JavaScript 仍然被加载 ,所以这可能很痛苦。
我注意到Turbolinks实际上非常庞大和复杂,因此值得阅读自己的文档,而不仅仅是Rails的小片段。 https://github.com/turbolinks/turbolinks
- Foundation 5 Topbar在导轨中不能始终如一地工作4
- 使用s3_direct_upload gem的错误URI错误(Javascript / RoR)
- 有没有办法将javascript变量传递给html.erb中的ruby方法
- 与Ruby和EM :: WebSocket :: Server的WebSocket握手
- 使用Javascript解析Ruby哈希文字
- Ruby on Rails – 将JavaScript变量从控制器发送到外部Javascript资产文件
- 如何从命令行运行QUnit测试?
- 使用引导程序和使用选项卡时,迷你图未绘制
- Google Maps For Rails – 仅在搜索结果发生变化时通过ajax更新标记