2013-06-26 25 views
0

注意:请不要被“OSGi”这个词吓倒。将RequireJS集成到OSGi服务器中

我在基于OSGi的处女座服务器环境中集成RequireJS(尽管细节无关紧要)。使用OSGi配置,我有一个根“OSGi bundle”,它具有需要设置主视图的JavaScript。然后有依赖于根的子包,每个子包都有自己的需要执行的JavaScript。

我的RequireJS在根包中运行良好,带有一个设置主视图的“主”文件。

问题:但是,我不知道如何最好地初始化子包的执行。我应该添加第二个<script data-main="main" src="require.js"></script>标记,这次是在子包中启动它的JavaScript执行吗?我是否应该在子包中正常导入主JavaScript文件?

+0

您可以在需要对象时添加路径;子文件夹/ MyObject来? – Gusten

+0

根路径为“resources/js/main.js”,特定子束的示例为“子束/资源/ 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); 

但我不喜欢具有(貌似我)重新初始化RequireJS。希望有人会知道更好的解决方案。