如何在Rails 3.1引擎中提供资产?它们应该放在哪里,是否可以自动包含?
所有引擎资产文件夹的路径都会被自动加载。
默认情况下,这些资产本身不会被加载。这是可以理解的,因为加载是通过require_tree .
进行的,它会从当前文件夹(即主应用程序资产文件夹)加载所有CSS/JS,但不包括引擎资产。
简单的解决方案是要求用户在application.js/css或其他需要时加载js/css。由于路径已正确加载,用户只需指定您的资产名称(我建议使用引擎名称)。例如:
添加到 main_app/app/assets/javascripts/application.js
:
//= require your_engine_name
如果您将JavaScript代码拆分为不同的文件,则您的文件your_engine_name/app/assets/javascripts/your_engine_name.js
可能包含以下内容://= require_tree .
这将会加载位于your_engine_name/app/assets/javascripts/
文件夹中的所有js文件,因为"."代表本地文件夹(在这种情况下是你的引擎Javascripts文件夹)。
需要注意的是,当设置config.use_sprockets
时,ActionView::Helpers::AssetTagHelper.register_javascript_expansion
似乎没有任何效果。希望他们至少在这种情况下发出警告。
如果您有一个用于安装您的引擎的rake任务,那么您可以将其追加到application.js中。
用户另一种包含它的方法是在erb布局中插入<%= javascript_include_tag "your_engine_name" %>
。
我不认为有自动插入它的方法。