2017-07-29 54 views
1

我想在Ruby on Rails 4.2.0中使用視圖特定的JavaScript,所以我想要在任何要加載的地方動態加載它。我把應該加載的javascript文件(headers.js)放在assets/javascripts中。我刪除了application.js文件中的require樹行。在Ruby on Rails中加載JavaScript

我已經更新application.html.erb

application.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Sandbox</title> 
     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
     <%= stylesheet_link_tag params[:controller] %> 
     <%= csrf_meta_tags %> 
     <%= render 'partials/shim' %> 
    </head> 
    <body> 
     <%= render 'partials/header' %> 
     <%= yield :javascript_includes %> 
     <%= render 'partials/footer' %> 
     <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    </body> 
</html> 

,我想呼籲觀點的最頂端的JavaScript文件。

view.html.erb

<% content_for :javascript_includes do %> 
    <%= javascript_include_tag "headers.js" %> 
<% end %> 

我已經更新了初始化/ assets.rb文件以及:

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

出於某種原因,該視圖的HTML內容將不加載和我在控制檯中收到錯誤:未捕獲的ReferenceError:未定義jQuery。

爲什麼它不起作用?我如何做這項工作,我錯過了什麼?

+1

也許你的文件依賴於jQuery的,而你試圖加載它在Rails加載jQuery之前,你需要看看是否改變資產的順序使它工作。 –

+0

試試'<%= javascript_include_tag「headers.js」%>'並重新啓動服務器,你會得到什麼? –

回答

1

不是傳遞javascript_includesyield,儘量只需要你的地方要直接在視圖中你需要的JavaScript文件,喜歡的東西:

<%= javascript_include_tag "headers.js" %> 
    <div class="vertical-center"> 
    ... 

body在application.html.erb只是想:

<%= render 'partials/header' %> 
<%= yield %> 
<%= render 'partials/footer' %> 

而且您可以將application.js文件移動到頂端,以保留Rails的「結構」:

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
... 
0

這應該工作:

添加鑑於

<% content_for(:head) do %> 
    <%= javascript_include_tag 'headers.js' %> 
<% end %> 

而且在初始化/ assets.rb

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