2012-10-16 25 views
0

在這裏開發我的第一個Rails應用程序。試圖讓jQuery在我的視圖中工作,據我所知,我應該只使用當前版本的Rails 3.2.8「即裝即用」。Ruby on Rails 3.2.8&jQuery:空白的javascript函數體?

這裏就是我的了:

  • 視圖稱爲寄存器#指數(有一個叫做 '註冊' 控制器):

    <head> 
        <%= stylesheet_link_tag "application", controller.controller_name %> 
        <%= javascript_include_tag "application", controller.controller_name %> 
    </head> 
    
  • 兩個JS文件正由這個觀點裝:application.js and register.js

    的application.js

    //= require jquery 
    //= require jquery_ujs 
    //= require twitter/bootstrap 
    

    register.js

    $(document).ready(function(){ 
    alert("Hello, jQuery!"); 
    }); 
    

當我通過我的瀏覽器中加載頁面時,我可以看到包括的jquery.js文件,和我的register.js已加載,現在已轉換爲:

(function() { 

}).call(this); 

alert()呼叫丟失(並且不觸發)。爲什麼這是空白的?這是我的寶石問題,還是我的jQuery語法有問題?

值得一提的一些額外的東西:

  • 的Gemfile包括jquery-rails,我已經運行bundle installrails g jquery:install
  • 即使我把jQuery的比alert()等,函數體仍然顯示爲空白。
  • 我已在每次測試之間清除了緩存。
  • 瀏覽器沒有報告JavaScript錯誤(Chrome)
  • 此代碼或多或少直接從jQuery教程中複製/粘貼。

EDIT:增加了我的javascript標籤如何包含在頁面中。

+0

你能粘貼你如何包括這些JavaScript文件在你的HTML? – fkreusch

+0

嘿fkreusch,我添加了如何在上面的視圖中包含javascript文件的代碼。它用一個'<%javascript_include_tag%>' –

回答

0

想通了。

因此,即使是被加載在我的application.js文件jQuery的,這不是在範圍爲register.js文件來使用(這顯然是在並行加載,可能是由於我如何在我javascript_include_tag引用它)

的解決方案是,以確保比jQuery是在作用域額外register.js文件,通過在register.js它加載jQuery的開頭添加一個清單評論:

新修訂的register.js文件:

//= require jquery 
//= require jquery_ujs 

$(document).ready(function(){ 

    alert('Hello, jQuery!'); 

}); 

注意

它只是恰巧我也是用Twitter的引導護欄,這顯然包括jQuery的在它的包裝。當我用//= require jquery包括以上,雖然它的工作,它在瀏覽器中引發了錯誤:

Uncaught typeerror Object#<object> has no method 'popover' 

爲了避免這種錯誤,我包括Twitter的引導參考和省略了其他的jQuery引用。我register.js文件作爲它結束了:

//= require twitter/bootstrap 

$(document).ready(function(){ 

    alert('Hello, jQuery!'); 

}); 

希望這有助於人誰跑在將來類似的問題!

  • 戴夫
0

現在你只加載特定於每個控制器的.js文件。試着改變你的head到所有的.js和.css文件加載一次,看看是否有幫助:

application.html.erb

<head> 
    <%= stylesheet_link_tag "application-all", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
</head> 

你還需要改變你的應用程序.js文件包括所有這樣的.js文件:

申請。JS

//= require jquery 
//= require jquery_ujs 
//= require twitter/bootstrap 
//= require_tree . 

如果還是不行,請嘗試將您的JavaScript出來的.js文件,併到您的視圖只是爲了確保你在的地方jQuery的正確。你會這樣做:

<body> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     alert("Hello, jQuery!"); 
    }); 
    </script> 
</body> 
+0

完成。感謝答覆Josh。這是一個故意的決定,爲了減少混亂/加載時間,防止加載我的所有JS/CSS文件(通過省略「// = require tree。」)。 (並不是每個頁面都使用JS/CSS文件) 鑑於上面的代碼,我不是隻加載' .js'文件,而是加載'application.js'文件; 'javascript_include_tag'引用兩者。 我的回答可能會讓事情變得更加清晰。 –

0

請試試這個:

$(document).ready(function(){ 
    alert("Hello, jQuery!"); 
}); 

使用該腳本的application.js ..如果你得到警報 ,這意味着你的register.js文件沒有正確包括。

+0

試過了;沒有工作,很奇怪。但我可以確認*註冊的事實。js *文件正在加載,因爲當我加載頁面時,我可以在Chrome瀏覽器開發工具的資源中看到它。 –