Rails 引擎:使主机应用程序 javascript 可用于已安装的引擎
Rails Engines: Make host app javascript available to Mounted Engine
下面是我正在尝试做的事情的快速视图:
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 可用于我的引擎。遗憾的是,它不起作用。
感谢任何帮助,谢谢!
答案:在您的每个引擎中:如果您想加载主机应用程序的 javascript 文件,只需在引擎的 javascript 清单文件中添加此行:
//= require application.js
这是指宿主应用程序的 application.js
文件,而不是引擎。引擎的application.js文件是为了区分两者的命名空间:
例如:my_engine/application.js
将主机应用程序 css 加载到每个引擎的 css 中也是如此。只需将此行放在引擎的清单文件中,即可使主机应用程序的 css 对您的引擎可用:
*= require application.css
下面是我正在尝试做的事情的快速视图:
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 可用于我的引擎。遗憾的是,它不起作用。
感谢任何帮助,谢谢!
答案:在您的每个引擎中:如果您想加载主机应用程序的 javascript 文件,只需在引擎的 javascript 清单文件中添加此行:
//= require application.js
这是指宿主应用程序的 application.js
文件,而不是引擎。引擎的application.js文件是为了区分两者的命名空间:
例如:my_engine/application.js
将主机应用程序 css 加载到每个引擎的 css 中也是如此。只需将此行放在引擎的清单文件中,即可使主机应用程序的 css 对您的引擎可用:
*= require application.css