Rails引擎:为主机引擎提供主机应用程序javascript

时间:2015-03-20 17:10:29

标签: javascript jquery ruby-on-rails asset-pipeline rails-engines

以下是我想要做的快速视频:

var hostAppJs = {
    callMe: function(){
        alert("CALL ME FROM MAIN APP ");
    }
}

var hookedInEngineJs = {
    init: function(){
        $('button').on('click', function(){
            hostAppJs.callMe();
        });         
    }
}
hookedInEngineJs.init();

基本上,我希望所有主机应用程序的javascript可用于已安装的引擎。当javascript全部用于我的挂载引擎时,它应该看起来像在上面,即使hostAppJs javascript对象仅存在于主机应用程序中,并且hookedInEngineJs javascript对象仅存在于安装发动机。

我遇到的问题是,当我在挂载的引擎内部时,它找不到hostAppJs对象,因此看起来没有为挂载的引擎正确加载它。

以下是我的主机应用的application.js文件:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

这是我的挂载引擎的application.js文件:

//= require '/<absolutePathToHostApp>/assets/javascripts/application.js'
//= require_tree .

所以我假设对于我的挂载引擎,来自主机应用程序的所有javascript都被加载并提供给我的引擎,然后它加载到它自己的所有javascript中。因此,我认为我的主机应用程序的javascript可用于我的引擎。可悲的是,它不起作用。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

答案:在每个引擎中:如果要加载主机应用程序的javascript文件,只需在引擎的javascript清单文件中添加此行:

//= require application.js

这是指主机应用的application.js文件,而不是引擎。引擎的application.js文件是命名空间,以便区分两者:

ex:my_engine/application.js

将主机应用程序的css加载到每个引擎的css中也是一样的。只需将此行放在引擎的清单文件中即可使主机应用程序的css可供您的引擎使用:

*= require application.css