使用Rails 3.1引擎的资产
如何在Rails 3.1中的引擎中提供资产? 它们应该放在哪里,是否可以自动包含在内?
( 最初由Tomas Celizna提出 )
将自动加载所有引擎资产文件夹的路径。
默认情况下不加载资产本身。 这是可以理解的,因为加载是使用require_tree .
完成的require_tree .
,从当前文件夹(即主应用程序资产’文件夹)加载所有css / js,但没有说明引擎资产。
简单的解决方案是要求用户在application.js / css或其他需要的地方要求js / css。 正确加载路径后,用户只需指定资产名称(我建议使用引擎名称)。 例:
附加到main_app/app/assets/javascripts/application.js
:
//= require your_engine_name
如果您已将js拆分为不同的文件,则您的文件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" %>
。
我认为没有办法自动插入它