首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过link_to帮助程序单击后,Rails、javascript无法加载

通过link_to帮助程序单击后,Rails、javascript无法加载
EN

Stack Overflow用户
提问于 2013-07-12 01:48:17
回答 7查看 33.9K关注 0票数 80

当我在rails中使用link_to助手时,我在加载javascript时遇到了一些问题。当我用‘localhost:3000/products/ $(document).ready’手动输入url或重新加载页面时,javascript会加载,但当我通过如下所示的链接时,新页面上不会加载javascript。

Link_to,单击此链接时不加载javascript:

代码语言:javascript
复制
<%= link_to "New Product", new_product_path %>

products.js文件

代码语言:javascript
复制
$(document).ready(function() {
    alert("test");
});

任何帮助都将不胜感激。提前感谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 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'事件:

代码语言:javascript
复制
$(document).on('page:change', function() {
    // your stuff here
});

或者,为了与常规页面加载和Turbolinks兼容,您可以这样做:

代码语言:javascript
复制
var ready = function() {
    // do stuff here.
};

$(document).ready(ready);
$(document).on('page:change', ready);

如果您使用的是Ruby on Rails >5 (可以通过在控制台中运行rails -v进行检查),请使用'turbolinks:load'而不是'page:change'

代码语言:javascript
复制
$(document).on('turbolinks:load', ready); 
票数 142
EN

Stack Overflow用户

发布于 2014-06-14 01:46:04

我也有同样的问题,但jquery.turbolinks帮不上忙。我注意到我必须重写GET方法。

这是我的样本:

代码语言:javascript
复制
<%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %>
票数 66
EN

Stack Overflow用户

发布于 2016-07-27 04:58:03

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

代码语言:javascript
复制
$(document).on('turbolinks:load', function() {
  // Should be called at each visit
})

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

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17600093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档