2014-07-10 61 views
0

我在那裏的application.js跟隨指定的Rails應用程序:導軌 - jQuery是有時沒有加載

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

jQuery是由軌道系統加載。

問題是,有些時候它看起來像沒有加載jQuery,因爲 - 例如谷歌地圖 - 不工作(和其他jQuery相關的東西)。刷新/重新加載後,一切正常,但這種行爲是非常不愉快的。

因爲我從來沒有遇到過這個問題,所以我不確定會出現什麼問題 - 我會嘗試從Google加載jQuery(通過頁面標題中的HTML鏈接),如果有幫助,將會看到它。

但是,有沒有人遇到過這個問題,並有一個小費來解決它?

謝謝

+0

可能重複你仍然從中得到幫助[http://stackoverflow.com/questions/23254379/sometimes-javascript-run-perfect-and-sometimes-not -in-ruby-on-rails-4] –

回答

1

Turbolinks

最好的提示,我可以給將是它的一個turbolinks問題:

後刷新/重載是一切工作,但這種行爲是非常 不愉快。

你所描述什麼是Turbolinks問題的典型標誌 - 基本上,當您使用Turbolinks,它只是重新加載通過Ajax網頁的<body>標籤。這使得<head>吊牌完好,這使得Java腳本認爲你的頁面元素並沒有改變(從而防止它們結合)

-

修復

解決這個問題的辦法要麼使用方法:

delegation

因爲JavaScript只能事件綁定到在DOM存在的元素,它不會能夠PROCE在加載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 . 
+1

謝謝Rich,爲你的信息。我更深入地檢查了它,當我在應用程序中並單擊徽標(意味着它將我重定向到應用程序的根目錄),那麼jQuery事件不起作用。但是,當我刷新時,它正在工作,所以它的行爲與在OP中的行爲稍有不同。 但是,我試圖安裝** jquery-turbolinks **寶石,但它並沒有幫助解決問題。 – user984621

+0

你有任何控制檯錯誤或任何東西?我很確定這是一個Turbolinks問題 –