2017-07-29 56 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)