27

应该如何在 Rails 3.1 的引擎中提供资产?它们应该位于何处,是否可以自动包含在内?

最初由 Tomas Celizna 提出

4

1 回答 1

41

自动加载所有引擎资产文件夹的路径。

默认情况下不加载资产本身。这是可以理解的,因为加载是用 完成的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 .

这将加载所有 js 文件your_engine_name/app/assets/javascripts/,作为“。” 指的是本地文件夹(在这种情况下是您引擎的 javascripts 的文件夹)。

请注意,设置ActionView::Helpers::AssetTagHelper.register_javascript_expansion时似乎没有任何效果config.use_sprockets。我希望他们至少会在这种情况下发出警告。

如果您有安装引擎的 rake 任务,那么您可以附加到 application.js。

用户包含它的另一种方法是<%= javascript_include_tag "your_engine_name" %>在 erb 布局中插入。

我认为没有办法让它自动插入

于 2011-05-04T01:57:48.267 回答