Rails,点击通过link_to助手后JavaScript不加载

当我在rails中使用link_to helper时,我遇到了一些麻烦。 当我手动input“本地主机:3000 /产品/新”的url或重新加载页面,JavaScript加载,但是当我通过一个链接,如下所示,jQuery $(document).ready将不会加载新一页。

Link_to,当我点击这个链接时,javascript不会加载:

 <%= link_to "New Product", new_product_path %> 

products.js文件

 $(document).ready(function() { alert("test"); }); 

任何帮助将非常感激。 提前致谢!

你在使用Rails 4吗? (通过在控制台中执行rails -v来查找)

这个问题可能是由于新增加了Turbolinksgem。 它使您的应用程序像单页JavaScript应用程序一样运行。 它有一些好处( 它更快 ),但是不幸的是它破坏了一些现有的事件,比如$(document).ready()因为这个页面不会被重载。 这可以解释为什么直接加载URL时JavaScript运行正常,但是当您通过link_to导航到JavaScript时,则不行。

这是一个关于Turbolinks的RailsCast 。

有几个解决scheme。 您可以使用jquery.turbolinks作为插件修复程序,也可以将$(document).ready()语句切换为使用Turbolinks 'page:change' change'event:

 $(document).on('page:change', function() { // your stuff here }); 

或者,你可以做这样的事情,以兼容常规页面加载以及Turbolinks:

 var ready = function() { // do stuff here. }; $(document).ready(ready); $(document).on('page:change', ready); 

我得到了同样的问题,但jquery.turbolinks没有帮助。 我注意到我必须重写GET方法。

有我的样品:

 <%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %> 

如果你在rails 5而不是'page:change'你应该使用'turbolinks:load'像这样:

 $(document).on('turbolinks:load', function() { // Should be called at each visit }) 

来源: https : //stackoverflow.com/a/36110790

你也可以用一个指定data-no-turbolink的div来包装你的链接。

例:

 <div id="some-div" data-no-turbolink> <a href="/">Home (without Turbolinks)</a> </div> 

来源: https : //github.com/rails/turbolinks

确保你没有任何内嵌的<script>标签。 (内联脚本标记与turbolinks不兼容)。

FWIW,从Turbolinks文档 ,捕获更合适的事件,而不是$(document).readypage:change

page:load有一个警告,它不会触发caching重新加载…

一个新的body元素已经加载到DOM中。 部分replace或从caching中恢复页面时不触发,以免在同一主体上触发两次。

而且由于Turbolinks只是切换视图, page:change更合适。