2017-07-11 60 views
1

我使用:JavaScript的資產這麼想的負載

Linux Ubuntu 16.04 

ruby 2.4.0p0; 

rails 5.1.1 

我在Rails中begginner,我已經跟着on Rails的4基礎培訓lynda.com以紅寶石學習。我現在停留在加載js資產任務。

我所創建的 「應用程序/資產/ Java腳本/ demo.js」 文件,該文件包含js函數:

function jsRoar(name) { 
 
    alert('I am ' + name + '. Hear me roar!'); 
 
}

然後,我必須加載此文件在我的清單文件「應用程序/資產/ Java腳本/ public.js「

//= require jquery 
//= require jquery_ujs 
//= require demo 

後,我已經添加外部JS包括我在佈局的」應用程序/視圖/佈局/應用程ation.html.erb「:

<%= javascript_include_tag "public" %> 

在我的控制器中我已經通過打字包括我的佈局‘應用程序/控制器/ demo_controller.rb’

layout 'application' 

最後,我必須通過鍵入稱爲我的功能在我的演示/ index.html.erb這些JS代碼:

<%= link_to('Roar', '#', :onclick => "jsRoar('Yassser');return true;") %> 
<%= javascript_tag("jsRoar('Rails');")%> 

之後,我得到「未定義功能」在我的鉻控制檯和警報沒有出現。我已經在相同的HTML定義的功能。 erb,它的工作原理如此這不是我認爲的JavaScript問題。 我也是不得不提的是,在第一次運行我的服務器,我已經獲得,所以我已經通過添加「配置/初始化/ assets.rb」這一行固定資產編譯的問題:

Rails.application.config.assets.precompile += %w(public.js) 

我我可以獲得更多細節。 請幫忙。

+0

點擊鏈接後,一切都完成加載產生彈出? –

+0

你可以看看頁面中包含的'public.js'(也就是說,當瀏覽器看到它後,Rails已經對它進行後處理)並驗證'demo.js'是否包含在其中?我的猜測是,你的清單文件的語法有一些問題,使它不被包含在內。 – pjmorse

+0

@SimpleLime:不會在加載頁面後單擊鏈接後顯示彈出窗口,因爲我在頁面加載完成後打了一個電話,點擊鏈接後又打了一個電話。 –

回答

0

我想這:

<%= javascript_tag("jsRoar('Rails');")%> 

應該是:

<%= javascript_include_tag("demo") %> 
+0

爲什麼? 'javascript_include_tag(「public」)'應該已經加載了該函數,因爲'public'清單已經需要'demo'。我並不是說你錯了,但我不明白你的答案你爲什麼會是對的。 – pjmorse

+0

其實我不認爲這是問題,因爲通過 '<%= javascript_tag(「jsRoar('Rails');」)%>'helper我打算調用這個函數。 對於js資源加載,我已在佈局中添加了: '<%= javascript_include_tag(「public」)%>' 在標題部分中,因爲public.js是此項目的清單文件。 –

+0

我只是嘗試了它與'application.js'中包含的'require'區別,並且它按預期工作,所以我會認爲pjmorse是正確的,並且js文件沒有正確呈現。除非你的控制器繼承自佈局與應用程序不同的其他控制器,否則你不需要調用'layout'應用程序'',因爲默認情況下它使用''應用程序'' –

0

看看這段代碼在你看來工作:

$(document).ready(function(){ 
    jsRoar('Yassser'); 
}) 
+0

它沒有任何作用,它仍然不會沒有工作。對不起:( –

2

我的問題是刪除「試玩後解決.coffee「文件。 我發現我的問題來源於這樣一個事實,即我有兩個具有相同名稱(但擴展名不同)的文件「demo.js」和「demo.coffee」。由於Rails資產助手平等對待coffescript和js文件,所以這是不明確的。 所以我刪除了「demo.coffee」,所有的問題都解決了。 謝謝大家。 @max的大thnx與他的回覆在this post