【问题标题】:Rails Engines: Make host app javascript available to Mounted EngineRails 引擎:使主机应用程序 JavaScript 可用于已安装的引擎
【发布时间】:2015-03-20 17:10:28
【问题描述】:

这是我正在尝试做的快速视觉:

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 jquery ruby-on-rails asset-pipeline rails-engines


    【解决方案1】:

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

    //= require application.js
    

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

    例如:my_engine/application.js

    将宿主应用程序的 css 加载到每个引擎的 css 中也是如此。只需将此行放入引擎的清单文件中,即可使主机应用的 css 对您的引擎可用:

    *= require application.css
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 2022-07-16
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多