Rails资产管道:JavaScript被执行两次

前端之家收集整理的这篇文章主要介绍了Rails资产管道:JavaScript被执行两次前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的 JavaScript正在执行两次.当我运行Chrome调试器时,我注意到单个JavaScript文件将在第一次执行代码,然后,application.js文件将再次执行代码.

我相信这种情况正在发生,因为我最近关闭了预编译,因为我遇到了Heroku的问题.在此之后我运行了rake资产:预编译.

解决方法

Turbolinks

您可能在Turbolinks中遇到问题(考虑到您已将其包含在资产管道中);虽然这可能不是问题.

Turbolinks旨在通过加载< body>来加快页面加载时间.使用ajax标记您的新网页,并保持< head>标签完整.这是为了让您的应用程序只加载它所需的HTML,但会在您的页面上弄乱JS.

如果你的JS被解雇了两次,那可能表明Turbolinks正在干扰你的JS.因为您没有在日志中包含任何示例,所以我将无法向您提供任何具体信息,但您应该能够通过从布局和应用程序清单JS文件删除turbolinks来测试它:

#app/views/layouts/application.html.erb
= javascript_include_tag "application","data-turbolinks-track" => false

#app/assets/javascripts/application.js
//= require turbolinks -> remove this line

如果您这样做,请重新启动服务器&重新加载有问题的页面.如果它仍然带有错误功能,这意味着Turbolinks不是问题(你应该重置你改变的所有东西)

活动

您可能遇到的另一个问题是您如何调用/触发事件.这可能有很多原因,但你一定要看看你如何调用你的JS:

#app/assets/javascripts/application.js
$(document).on("click",".element",function(){
    //your stuff here
});

我们总是委托DOMdocument元素.虽然这可能会导致一些资源问题,但我们发现它使得Rails应用程序在Asset Pipeline中更加强大,因为它允许您真正识别页面上的元素.

如果您尝试从DOM上的单个对象触发事件,您可能会发现JS将“捕获”事件两次(无论出于何种原因),从而导致您的问题.尝试委派两次被调用的事件

功能

最后,您的功能可能是问题.

如果您有任何anonymous functions或特定事件的函数,则需要确保它们能够被正确调用.你应该在JS& amp;中使用page events来做到这一点. Turbolinks

#app/assets/javascripts/application.js
var your_function = function() {
    //stuff here
};

$(document).on("page:load ready",your_function);
原文链接:https://www.f2er.com/js/154815.html

猜你在找的JavaScript相关文章