Rails Engines: сделать javascript хост-приложения доступным для 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, поэтому кажется, что он загружается неправильно для смонтированного движка.

Вот мой файл my application.js для моего хост-приложения:

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

А вот мой файл application.js для моего смонтированного двигателя:

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

Итак, я предполагаю, что для моего смонтированного движка весь javascript из хост-приложения загружается и становится доступным для моего движка, а затем он загружает весь свой собственный javascript. Таким образом, я думаю, что javascript моего хост-приложения доступен для моего движка. К сожалению, это не работает.

Любая помощь приветствуется, спасибо!


person Neil    schedule 20.03.2015    source источник


Ответы (1)


Ответ: В каждом из ваших движков: если вы хотите загрузить файл javascript хост-приложения, просто добавьте эту строку в файл манифеста javascript движка:

//= require application.js

Это относится к файлу application.js хост-приложения, а НЕ к двигателям. Файл application.js движка имеет пространство имен, чтобы различать их:

ex: my_engine/application.js

То же самое для загрузки в css хост-приложения в каждый из css движка. Просто поместите эту строку в файл манифеста движка, чтобы сделать css хост-приложения доступным для ваших движков:

*= require application.css
person Neil    schedule 20.03.2015