Rails,点击 link_to 帮助程序后 javascript 未加载

新手上路,请多包涵

当我在 Rails 中使用 link_to 帮助程序时,我在加载 javascript 时遇到了一些问题。当我使用“localhost:3000/products/new”手动输入 url 或重新加载页面时,javascript 加载,但是当我通过如下所示的链接时,jQuery $(document).ready 将不会加载新页面。

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

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

products.js文件

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

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

原文由 StickMaNX 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 335
2 个回答

你在使用 Rails 4 吗? (通过在您的控制台中执行 rails -v 找出答案)

这个问题可能是由于新添加的 Turbolinks gem。它使您的应用程序表现得像一个单页 JavaScript 应用程序。它有一些好处( 速度更快),但不幸的是 它破坏了一些现有事件,例如 $(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);

原文由 Ryan Endacott 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

有我的样品:

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

原文由 Ice-Blaze 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题