Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dojo amd在运行时加载跨域模块_Dojo_Amd - Fatal编程技术网

Dojo amd在运行时加载跨域模块

Dojo amd在运行时加载跨域模块,dojo,amd,Dojo,Amd,我想从www上的一个特设服务器加载Dojo1.9 amd模块,但直到运行时(使用url参数),我才知道从哪里加载 本质上,我想做与此等效的事情: require(['http://www.foo.com/SomeRandomModule'], function( SomeRandomModule ) { // use SomeRandomModule }); 捷径 当涉及到模块系统和相关路径时,可能会有一些意想不到的怪癖,我还没有充分使用它来说明: require([ "//host/

我想从www上的一个特设服务器加载Dojo1.9 amd模块,但直到运行时(使用url参数),我才知道从哪里加载

本质上,我想做与此等效的事情:

require(['http://www.foo.com/SomeRandomModule'], function( SomeRandomModule ) {
    // use SomeRandomModule
});
捷径 当涉及到模块系统和相关路径时,可能会有一些意想不到的怪癖,我还没有充分使用它来说明:

require([ "//host/myext/mod1/mod2.js" ],function(mod2){
    // If current webpage is http:// or https:// or file:// 
    // it tries to use the same protocol
});
更好的方法 将
require()
配置为将以特定包名(例如
foo
)开头的所有模块视为来自特定URL。在入门页面中,类似于:

<script src="dojo/dojo.js" 
    data-dojo-config="packages:[{name:'myext',location:'//host/js/myext'}], async: 1, >
</script>
如果您使用的是Dojo引导安装,则可以避免触摸您的
数据Dojo config
,而是将其放在
run.js
启动文件中:

require({
    baseUrl: '',
    packages: [         
        'dojo',
        'dijit',
        'dojox',            
        'myapp',
        { name: 'myext', location: '//host/js/myext', map: {} }
    ]    
}, [ 'myapp' ]);

太棒了……我不知道你可以使用//语法引用模块。它可以工作,但当远程模块具有仅存在于远程服务器上的依赖项时,它会阻塞。我将继续并标记您的完整答案,但您对如何解决远程模块的依赖关系有何想法?我不确定是否有办法使可传递依赖关系正常工作。。。也许是
package.json
值的魔力?我怀疑,即使跨域包有东西告诉您它需要什么包,它也只会声明名称,并且仍然由您告诉dojo到哪里获取数据。。。
require({
    baseUrl: '',
    packages: [         
        'dojo',
        'dijit',
        'dojox',            
        'myapp',
        { name: 'myext', location: '//host/js/myext', map: {} }
    ]    
}, [ 'myapp' ]);