我有像我这样的资产文件夹结构
assets
javascripts
products
--product.js
--productValidate.js
store
--store.js
我希望将project.js和projectValidate.js添加到我的application.js中,作为资产管道的一部分,仅在调用产品控制器中的操作时添加,并在调用存储控制器中的操作时添加store.js。我怎样才能在rails 3.1中实现这个目标?
答案 0 :(得分:4)
正如Rahul已经提到的,application.js是预编译的,每个动作都是相同的。 所以它不依赖于特定的控制器。 Application.js应包含您所有(或大部分)操作所需的JavaScript。
但是,您可以使用嵌套布局扩展应用程序布局。让我们假设以下结构:
... app/view/layouts/application.html.erb ...
<html>
<head>
<%= javascript_include_tag 'application' %>
<%= yield :javascripts %>
<%= stylesheet_link_tag 'application' %>
<%= yield :stylesheets %>
</head>
<body>
<%= yield %>
</body>
</html>
和a:
... app/view/layouts/products.html.erb ...
<% content_for :stylesheets do %>
<%= stylesheet_include_tag 'products' %>
<% end %>
<% content_for :javascripts do %>
<%= javascript_include_tag 'products' %>
<% end %>
<%= render :template => 'layouts/application' %>
所以你只需要在产品文件中添加/要求你的样式表和javascripts。 注意,这里的所有代码都应该被读作伪代码,我没有测试它。
从"official" Render-Guide获取的信息。
答案 1 :(得分:1)
据我所知,资产pipilene是应该预编译的东西。所以......从概念上讲,它应该立即获取所有文件并返回一个已复制的文件,这对于缓存很有用。
您可以将它们存储在od资产的某个地方(例如,在旧版Rails中,将其存储在其中)并根据当前控制器和操作将其包含在内
答案 2 :(得分:1)
我喜欢这个问题的答案中提到的方法:
Rails 3.1 asset pipeline: how to load controller-specific scripts?
答案 3 :(得分:1)
This is what I am working on现在要弥合Rails 3.1资产管道和Jammit之间的差距。
我还没有提供任何文件,因为我认为它正在开发中。 但是this is它基本上应该允许你做什么:
# config/initializers/pakunok.rb
# Define the dependencies between Rails assets:
require 'pakunok'
Pakunok::Pakunok.current.configure do
asset('products/product.js').needs('products/productValidate.js')
end
然后,在您的布局中,您只需要一个包含。所有相关文件将自动包含:
# app/views/layouts/application.html.erb
<%= include_javascripts %>
请参阅规格以了解宝石可以做什么。 注意:它仍在开发中,宝石本身将在以后拆分为多个。
对于您希望获得支持的任何特定用例,请submit issues我保证在有空的时候努力实施这些用途:)
答案 4 :(得分:0)