javascript - Assets 在 Rails 中是如何工作的?

标签 javascript jquery ruby-on-rails

我想在我的 Rails 应用程序中使用 jQuery/Bootstrap/其他第 3 方 js,但我无法理解 Rails 如何引用这些脚本。

在我的 Gem 文件中我有:

gem 'jquery-rails',   '4.0.3'
gem 'bootstrap-sass', '3.2.0.0'
gem 'sass-rails',     '5.0.2'

我看到 Rails 在 assets/application.js 中包含以下内容

//= require jquery
//= require jquery_ujs

这是否意味着 Rails 将为我的应用程序的每个屏幕包含 jQuery?

如果我只想对某些屏幕而不是每个屏幕使用第 3 方怎么办我怎样才能做到这一点?

而且我在我的 Rails 项目中找不到 jQuery.min.js。它在哪里位于?。我一直在搜索以下内容:app/assets/javascriptsvendor/assets/javascriptslib/assets 但没有 jQuery/jQuery UI 脚本。

最佳答案

  1. 是的,它将在使用默认布局呈现的每个屏幕上包含它 (app/views/layouts/application.html.erb)

  2. jquery/sass/bootstrap css/js 文件位于 gems 目录中(在您的 ruby​​ 安装目录的深处)。因此它们在您的项目之外,链轮从该外部目录中提取它们。

  3. 要避免在每个页面上都包含这些文件,您只需创建另一个不引用 application.js 文件的布局。

要包含在具有相同布局的不同页面上使用的不同脚本,您可以使用 content_for 助手,有很多事情需要改变,所以:

应用/views/layouts/application.html

# remove this
<% javascript_include_tag 'application', 'data-turbolinks-track' => true %>

# and add this
<%= yield :scripts %>

接下来,在您的所有 View 中,您可以添加类似这样的内容(在文件中的任何位置):

<% content_for :scripts do %>
   <%= javascript_include_tag 'application' %>
<% end %>

该特定示例将只包含在某些页面上具有依赖性的 application.js,而不会在其他页面上包含任何内容。通常,您可以创建多个 list 文件(许多类似 application.js 的文件。)但是如果您对 sprockets 不是很满意,那么将常规 js 文件放入公共(public)目录然后包含它们会简单得多使用类似的东西:

<% content_for :scripts do %>
  <script src="javascripts/jquery.js" ></script>
  <script src="javascripts/pagination.js" ></script>
<% end %>

javascripts/jquery.js 应该在您的公共(public)目录中可用。

关于javascript - Assets 在 Rails 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554222/

相关文章:

javascript - 两个输入文本只允许一个提交

ruby-on-rails - MongoMapper has_many 关联

javascript - ScrollTo 和 Localscroll 的视差背景效果

javascript - 以面向对象的方式使用 Meteor 和 javascript

javascript - JQuery-Select2 - 操作发送的 http-post 数据以发送文本而不是 ID

javascript点击功能不适用于php中生成的表单

javascript - Object.assign(...as) 更改输入参数

jquery - DataTables 分页似乎不适用于服务器端数据

ruby-on-rails - rails : how to load local file into the model?

ruby-on-rails - nil的未定义方法 `last':YouTube的NilClass嵌入rails