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).ready
是page:change
。
page:load
有一个警告,它不会触发caching重新加载…
一个新的body元素已经加载到DOM中。 部分replace或从caching中恢复页面时不触发,以免在同一主体上触发两次。
而且由于Turbolinks只是切换视图, page:change
更合适。