Rails,点击通过link_to帮助后javascript没有加载

Sti*_*aNX 78 javascript jquery ruby-on-rails

当我在rails中使用link_to helper时,我在加载我的javascript时遇到了一些问题.当我手动输入带有'localhost:3000/products/new'的url或重新加载页面时,javascript会加载,但是当我通过下面所写的链接时,jQuery $(document).ready将不会加载到新页面上.

单击此链接时,链接_to,javascript无法加载:

<%= link_to "New Product", new_product_path %>
Run Code Online (Sandbox Code Playgroud)

products.js文件

$(document).ready(function() {
    alert("test");
});
Run Code Online (Sandbox Code Playgroud)

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

Rya*_*ott 137

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

这个问题可能是由于新添加的Turbolinks宝石.它使您的应用程序的行为类似于单页JavaScript应用程序.它有一些好处(它更快),但不幸的是它打破了一些现有的事件,例如$(document).ready()因为页面永远不会重新加载.这可以解释为什么当你直接加载URL时JavaScript工作,但是当你通过一个导航到它时不能link_to.

这是关于Turbolinks 的RailsCast.

有几种解决方案.您可以使用jquery.turbolinks作为插件修复,或者您可以切换$(document).ready()语句而不是使用Turbolinks 'page:change'事件:

$(document).on('page:change', function() {
    // your stuff here
});
Run Code Online (Sandbox Code Playgroud)

或者,您可以执行类似的操作以兼容常规页面加载以及Turbolinks:

var ready = function() {
    // do stuff here.
};

$(document).ready(ready);
$(document).on('page:change', ready);
Run Code Online (Sandbox Code Playgroud)

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

$(document).on('turbolinks:load', ready); 
Run Code Online (Sandbox Code Playgroud)

  • 真棒!,这有效并解决了我的问题! (3认同)

Ice*_*aze 63

我遇到了同样的问题,但jquery.turbolinks没有帮助.我注意到我必须覆盖GET方法.

有我的样本:

<%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %>
Run Code Online (Sandbox Code Playgroud)

  • 这是最快的解决方案. (2认同)
  • 方法::解决我的问题 (2认同)
  • 很好.,"方法::获取"诀窍! (2认同)

use*_*001 24

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

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

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


小智 5

您还可以使用指定data-no-turbolink的div包装链接。

例:

<div id="some-div" data-no-turbolink>
    <a href="/">Home (without Turbolinks)</a>
</div>
Run Code Online (Sandbox Code Playgroud)

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