Rails包含特定视图中的js

时间:2017-10-14 10:05:19

标签: ruby-on-rails path header ruby-on-rails-5

我知道这已经在这里得到了解答:Javascript Include Tag Best Practice in a Rails Application但是我没有得到什么。

如何在:defaults标记中指定js文件?我试图指定js的路径而不是使用tag。

在application.html.erb中:

<head>
  <title>...</title>
  <%= csrf_meta_tags %>

  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  <%= yield :head %>
</head>

在视图中:

<% content_for :head, javascript_include_tag('qEditor/http_cdn.quilljs.com_1.3.2_quill') %>

此文件位于app/assets/javascripts/qEditor,根据IDE,路径正确。我将application.js从//= require_tree .更改为//= require_directory .,因此js文件不会在其他地方加载。它不起作用......

你可以帮我解决这个问题吗?我是铁杆的新人。谢谢

更新

application.html.erb:

<!DOCTYPE html>
<html>
<head>
  <title>....</title>
  <%= csrf_meta_tags %>
  <%= content_for :assets do %>
  <%end%>
  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>

<body>

<div class="container">
  <%= link_to 'Home', root_path, class: 'btn btn-default' %>
  <button onclick="toggleTodos()" class="btn btn-default">Toggle TODO's</button>

  <% flash.each do |key, value| %>
      <div class="alert alert-<%= key %>"><%= value %></div>
  <% end %>


  <div class="jumbotron">
    <%= yield %>
  </div>

</div>

</body>
</html>

1 个答案:

答案 0 :(得分:2)

供应商内容的正确位置(任何非项目特定或由您创作的内容)位于/vendor/assets/javascripts。这也解决了您的问题,因为vendor/assets不需要//= require_tree .

所以将其移至/vendor/assets/javascripts/http_cdn.quilljs.com_1.3.2_quill.js

/vendor/assets位于Sprockets默认资源查找路径上。

<head>
  <title>...</title>
  <%= csrf_meta_tags %>
  <%= content_for :assets do %>
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  <% end %>
</head>

由于content_for连接,您只需添加content_for(:assets)即可添加其他内容:

<% content_for :assets do >
  <%= javascript_include_tag('http_cdn.quilljs.com_1.3.2_quill') %>
<% end %>

这也允许您使用provideconcat: false,以防您想要覆盖布局提供的块。