【问题标题】:Rails include js into specific viewRails 将 js 包含到特定视图中
【发布时间】:2017-10-14 10:05:18
【问题描述】:

我知道这里已经回答了这个问题:Javascript Include Tag Best Practice in a Rails Application,但是我没有得到任何信息。

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

在 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 文件不会在其他地方加载。它不起作用...

你能帮我解决这个问题吗?我对rails真的很陌生。谢谢

更新

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>

【问题讨论】:

  • 您可以存根 js 文件以手动加载它,然后将其添加到 Rails.application.config.assets.precompile 中的 assets.rb 文件中,最后使用 javascript_include_tag 将其添加到您的视图中。
  • 如果您将文件放在vendor/assets 中,则不需要存根,无论如何您都应该放置供应商内容@SebastiánPalma
  • 我现在明白了,感谢@max 的提示。
  • 主要问题是视图中的行不正确。将content_for 与块一起使用,不要忘记将javascript_include_tage&lt;%= 一起使用,而不是&lt;% 标记,否则代码将不会在您的视图中输出。见:guides.rubyonrails.org/…

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


【解决方案1】:

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

所以把它移到/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 以防您想要覆盖布局提供的块。

【讨论】:

  • 我认为它可以工作,但它不是......对不起。你能检查我的 application.html.erb 是否正确吗?
  • “它不工作”是世界上最没用的信息。具体是什么不起作用?你必须自己调试你的应用程序。
  • 不起作用的是视图中没有加载 js 文件。我怀疑我真的不明白我应该如何在 application.html.erb 中加入“”,因为其他部分很清楚。
  • 只需将&lt;head&gt; 部分替换为我的回答中的部分。我虽然这很明显。
猜你喜欢
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多