5

我正在Pi-engine(基于 zend 框架 2 的 php 应用程序引擎)上构建应用程序。

在我的应用程序中,javascript 文件路径取决于应用程序名称,而应用程序名称由安装程序选择。

例如 require.js 的 url 将是:

http://my.site.name/asset/module-{module_name}/script/js/require.js

module_name 根据给定应用程序的名称而变化。

我知道我可以将路径放在后端的“data-main”属性中,例如:

<script data-main="/asset/module-{module_name}/script/" src="/asset/module-{module_name}/script/js/require.js"></script>

但我想知道有没有办法使用javascript动态设置baseurl,这样我就不需要接触后端了。

4

4 回答 4

10

http://requirejs.org/docs/api.html#config

此外,您可以在加载 require.js 之前将配置对象定义为全局变量 require,并自动应用这些值。这个例子指定了一些在 require.js 定义 require() 时要加载的依赖项:

<script>
    var require = {
        baseUrl: generateBaseUrl()
    };
</script>
<script src="scripts/require.js"></script>
于 2013-04-10T08:34:42.467 回答
0

如果我正确理解了您的问题,您可以在配置对象中使用“baseUrl”,您可以在其中设置找到 js 文件的路径。

require.config({
   baseUrl: "/js/"
});
于 2013-04-10T08:33:04.023 回答
0

谢谢你的回答,我刚刚在页面上找到了一个使用javascript的解决方案:如何获取当前javascript文件名的绝对路径

var scripts = document.getElementsByTagName("script");

require.config({
    baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0] + 'script/',
}); 

这看起来很奇怪,但它确实有效。

于 2013-04-10T08:58:04.567 回答
0

为了避免对全局范围的污染,您可以像在您的情况下一样将动态配置代码包装在立即执行的函数中:

require.config((function(){
    var scripts = document.getElementsByTagName("script");
    return {
        baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0]
    };
})());
于 2013-12-09T20:12:32.483 回答