Rails 3.1中的引擎资产

27
1个回答

41

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

默认情况下,这些资产本身不会被加载。这是可以理解的,因为加载是通过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" %>

我不认为有自动插入它的方法。


1
齿轮相关的东西目前正在进行一些工作,但你说的其他部分完全正确。干得好。 - Ryan Bigg
图片怎么办?我尝试从一个gem资产中访问图像,但失败了...这两个问题是否有关联? - mabounassif
我评论得太快了,现在在Rails 3.1中gem内的资源会自动加载。 - mabounassif
我创建了一个基于Rails 3.1.0.rc6的gem(引擎)。在它的app/assets中添加了一些资产。测试/虚拟应用程序显示在Rails.application.config.assets.path上。但是,当我在其他应用程序的Gemfile中通过bundler要求它时,它并没有出现...这对我来说毫无意义,应用程序在资产路径中显示了jquery-rails而不是我的gem。我错过了什么吗? - Tiago
1
这非常有帮助,但是在Rails 4中(可能所有版本),我必须执行//=require my_engine_name/application.js以包含文件。 - bobbdelsol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接