当我在rails中使用link_to助手时,我在加载javascript时遇到了一些问题。当我用‘localhost:3000/products/ $(document).ready
’手动输入url或重新加载页面时,javascript会加载,但当我通过如下所示的链接时,新页面上不会加载javascript。
Link_to,单击此链接时不加载javascript:
<%= link_to "New Product", new_product_path %>
products.js文件
$(document).ready(function() {
alert("test");
});
任何帮助都将不胜感激。提前感谢!
发布于 2013-07-12 01:55:06
你使用的是Rails 4吗?(通过在控制台中执行rails -v
来找出答案)
此问题可能是由于新添加的Turbolinks gem造成的。它使您的应用程序表现得像一个单页面JavaScript应用程序。它有一些好处(it's faster),但不幸的是它破坏了一些现有的事件,如$(document).ready()
,因为页面永远不会重新加载。这就解释了为什么当您直接加载URL时JavaScript可以工作,而当您通过link_to
导航到它时却无法工作。
这是一个关于Turbolinks的RailsCast。
有几个解决方案。您可以使用jquery.turbolinks作为临时修复程序,也可以将$(document).ready()
语句切换为使用Turbolinks 'page:change'
事件:
$(document).on('page:change', function() {
// your stuff here
});
或者,为了与常规页面加载和Turbolinks兼容,您可以这样做:
var ready = function() {
// do stuff here.
};
$(document).ready(ready);
$(document).on('page:change', ready);
如果您使用的是Ruby on Rails >5 (可以通过在控制台中运行rails -v
进行检查),请使用'turbolinks:load'
而不是'page:change'
$(document).on('turbolinks:load', ready);
发布于 2014-06-14 01:46:04
我也有同样的问题,但jquery.turbolinks帮不上忙。我注意到我必须重写GET方法。
这是我的样本:
<%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %>
发布于 2016-07-27 04:58:03
如果你使用的是rails 5而不是'page:change'
,你应该像这样使用'turbolinks:load'
:
$(document).on('turbolinks:load', function() {
// Should be called at each visit
})
https://stackoverflow.com/questions/17600093
复制相似问题