2013-06-26 3 views
0

Примечание: Пожалуйста, не пугайтесь слова «OSGi».Интеграция RequireJS в сервер OSGi

Я интегрирую RequireJS в OSGi-серверную среду Virgo (хотя детали неактуальны). С конфигурацией OSGi у меня есть корневой «пакет OSGi», в котором есть JavaScript, который должен настроить основной вид. Тогда есть суб-расслоения, которые полагаются на корень, каждый из которых имеет свой собственный JavaScript, который должен быть выполнен.

У меня есть RequireJS, хорошо работающий в корневом пакете с «основным» файлом, который настраивает основной вид.

Вопросы: Однако, я не знаю, как лучше всего инициализировать выполнение подкомплектов. Должен ли я добавить второй тег <script data-main="main" src="require.js"></script>, на этот раз в подкомплексе, чтобы запустить его выполнение JavaScript? Должен ли я просто импортировать основной файл JavaScript как обычно в подкомплексы?

+0

Можете ли вы добавить путь, когда вам нужен объект; подпапка/MyObject? – Gusten

+0

Корневой путь будет «resources/js/main.js», а примером конкретного подкомплекта будет «sub-bundle/resources/js/main.js». –

+0

Что вы подразумеваете под «инициализацией выполнения подкомплектов»? Из вашего нижеследующего ответа, похоже, вы подразумеваете «инициализировать конфигурацию путей»? – explunit

ответ

0

я в конечном итоге создание основных ресурсов JavaScript в указанных выше рамках с следующим тегом в корневом пучке:

<script data-main="js/main" src="<c:url value="require.js" />"></script> 

. , , с «JS/main.js» является:

require(['jquery'], function ($) { 
    // main script goes here . . . 
}) 

С выше в корневом пучке, субпакеты просто вызывают свой собственный JavaScript с:

<script>require(['sub-bundle/js/script.js'])</script> 

Таким образом, ответ на мой вопрос просто: используйте функцию require в суб-связках!

0

Одна из возможностей, которую я нашел, работает, хотя это уродливое и нежелательное решение, заключается в создании глобального объекта в корневом каталоге OSGi, который хранит пути, относящиеся к корню. Затем суб-расслоения могут распространять свои собственные пути на этот объект и повторно инициализировать RequireJS.

Пример в корневом пучке:

var config = { 
    paths: { 
    // root bundle paths go here . . . 
    } 
}; 

require(config.requirejs); 

Пример в субпакете:

$.extend(true, { 
    paths: { 
    // sub-bundle paths go here . . . 
    } 
}, config); 

require(config.requirejs); 

Но я не люблю, чтобы (по-видимому для меня) REINITIALIZE RequireJS. Надеюсь, кто-то узнает о лучшем решении.