我有一个Rails应用程序,其中application.js
指定如下:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require gmaps/gmaps
//= require underscore
//= require_tree .
jQuery由Rails系统加载。
问题在于,有时候看起来jQuery没有加载,因为 - 例如 - 谷歌地图 - 不起作用(以及其他与jQuery相关的东西)。刷新/重新加载后一切正常,但这种行为非常不愉快。
由于我从未遇到过这个问题,我不确定会出现什么问题 - 我会尝试从Google加载jQuery(通过页面标题中的HTML链接),如果有帮助的话会看到它
然而,你们中任何一个人都没有遇到这个问题而且有提示要解决它吗?
谢谢
答案 0 :(得分:1)
<强> Turbolinks 强>
我能给出的最佳提示是turbolinks
问题:
刷新/重新加载后一切正常,但这种行为非常好 不愉快。
您所描述的是Turbolinks问题的典型标志 - 基本上当您使用Turbolinks时,它只会通过Ajax重新加载您网页的<body>
标记。这使<head>
标记保持不变,这使得Javascript认为您的页面元素没有改变(从而阻止它们绑定)
-
<强>修复强>
解决这个问题的方法是使用:
因为javascript只能将事件绑定到DOM中存在的元素,所以在加载DOM之后,它将无法处理出现的任何元素。要解决这个问题,您可以委托来自容器的事件绑定,该容器始终存在document
:
$(document).on("click", "#your_element", function() {
// do stuff here
});
-
解决此问题的另一种方法是将事件封装在函数中,可以使用Turbolinks events
调用:
var tester = function(){
//do stuff here
};
$(document).on("page:load ready", tester);
-
#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 .