我写了一个rails引擎,希望能够在安装它的任何应用程序中自定义它。
[引擎/]应用/资产/ my_engine / application.js中:
//= require jquery
//= require ./engine_specific
//= require ./engine_customization
[APP /]应用/资产/ my_engine / engine_customization.js:
//= require selectize
$(document).ready(function () {
$('select').selectize();
});
这会导致js错误(选择不是函数)
我尝试过要求其他文件/ libs,并且没有链接器加载。
不确定我是否做错了或者这实际上是链轮中的错误。
编辑:
[引擎/]应用/视图/布局/ my_engine / application.html.haml:
!!!
%html
%head
%title My Engine
= stylesheet_link_tag "my_engine/application", media: "all"
= javascript_include_tag "my_engine/application"
= csrf_meta_tags
%body
= render 'my_engine/shared/header'
#content
#wrapper
= yield
答案 0 :(得分:2)
事实证明混合引擎和应用程序布局相当棘手,所以我采取了不同的方法。也像设计一样的宝石似乎使用:
我在我的gem中编写了生成器,将视图复制到app以及其他为控制器创建装饰器的人,其中必须指定应用程序布局。但它有一些注意事项:如果您的布局包含使用路径助手(即导航栏)的视图,则需要在帮助器前面添加" main_app。"。所以blog_post_path变为main_app.blog_post_path,而polymorphic_path([:edit,:admin,@ resources])变为main_app.polymorphic_path ......等等。
另一件事是应用程序控制器可能定义的实例变量或before_filters,并且布局呈现的视图需要这些变量。这些你需要在控制器装饰器中定义。
答案 1 :(得分:0)
默认情况下,只有应用程序的application.js清单由sprockets预编译。 所以你有两个选择:
A)
要求my_engine/application.js
应用程序的js显示
//app/assets/javascripts/application.js
//= require myengine/application.js
B)
将my_engine/application.js
添加到assets.precompile数组,然后将其包含在javascript_include_tag
#engine.rb
initializer "myengine.precompile" do |app|
app.config.assets.precompile += %w(application.js)
end
#views/foos/show.html.erb
javascript_include_tag 'myengine/application.js'