Rails - jQuery有时候没有加载

时间:2014-07-10 09:32:33

标签: javascript jquery ruby-on-rails

我有一个Rails应用程序,其中application.js指定如下:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require gmaps/gmaps
//= require underscore
//= require_tree .

jQuery由Rails系统加载。

问题在于,有时候看起来jQuery没有加载,因为 - 例如 - 谷歌地图 - 不起作用(以及其他与jQuery相关的东西)。刷新/重新加载后一切正常,但这种行为非常不愉快。

由于我从未遇到过这个问题,我不确定会出现什么问题 - 我会尝试从Google加载jQuery(通过页面标题中的HTML链接),如果有帮助的话会看到它

然而,你们中任何一个人都没有遇到这个问题而且有提示要解决它吗?

谢谢

1 个答案:

答案 0 :(得分:1)

<强> Turbolinks

我能给出的最佳提示是turbolinks问题:

  

刷新/重新加载后一切正常,但这种行为非常好   不愉快。

您所描述的是Turbolinks问题的典型标志 - 基本上当您使用Turbolinks时,它只会通过Ajax重新加载您网页的<body>标记。这使<head>标记保持不变,这使得Javascript认为您的页面元素没有改变(从而阻止它们绑定)

-

<强>修复

解决这个问题的方法是使用:

delegation

因为javascript只能将事件绑定到DOM中存在的元素,所以在加载DOM之后,它将无法处理出现的任何元素。要解决这个问题,您可以委托来自容器的事件绑定,该容器始终存在document

$(document).on("click", "#your_element", function() {
   // do stuff here
});

-

Turbolinks events

解决此问题的另一种方法是将事件封装在函数中,可以使用Turbolinks events调用:

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

$(document).on("page:load ready", tester);

-

JQuery turbolinks gem

#Gemfile
gem 'jquery-turbolinks'

#app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require gmaps/gmaps
//= require underscore
//= require_tree .