Rails资产管道需要从公共文件夹?

时间:2016-09-13 13:26:54

标签: javascript ruby-on-rails ruby ruby-on-rails-3 asset-pipeline

这是一个很好的做法,要求位于公共文件夹下的资产吗?例如我在public / mythirdparyjs文件夹下有很多javascript,我想让这些javascript文件只用于特定的页面,这将是最好的方法吗?

1 个答案:

答案 0 :(得分:2)

Thirdparty js文件应位于您的供应商文件夹中。将它们预编译为生产后,它们将自动移动到您的公用文件夹中。要调用特定页面上的某些文件,您需要删除require_tree指令,并注意在application.js资产文件中调用哪些文件。在每个视图页面(html.erb)的底部,您可以添加以下内容以仅运行特定于页面的js:

<%= content_for :javascript do %>
  <script type='text/javascript'>
    YOUR FUNCTIONS HERE
  </script>
<% end %>

然后在关闭正文标记之前的底部的应用程序/布局视图中,您应该添加:

<%= javascript_include_tag params[:controller] if Rails.application.assets_manifest.assets["#{params[:controller]}.js"] %>
<%=yield :javascript %>

然后,这将在逐页视图的基础上运行任何js,并包含相应控制器的js资产文件中的任何文件的任何require语句。

更新以解决注释:如果你安装了一个gem,然后需要某些js文件,那么应该从application.js文件中的app / assets / javascripts文件夹中获取这些文件(如果你想要那个gem那么如果您只需要在几页上使用该功能,则可以在整个应用程序中使用)或在控制器特定的js文件中使用。例如,angular gem可能在整个应用程序中使用,因此您可以将// = require语句添加到app / assets / javascripts文件夹中的application.js文件中。如果你手动下载一些js库,你应该将它们放在vendor / javascripts文件夹中,但是你仍然需要在app / assets / javascripts文件夹文件中需要它们。