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

时间:2013-09-06 01:36:28

标签: dojo amd

我想从www上的ad-hoc服务器加载Dojo1.9 amd模块,但我不知道从哪里到运行时(使用url params)。

从本质上讲,我想做相同的事情:

require(['http://www.foo.com/SomeRandomModule'], function( SomeRandomModule ) {
    // use SomeRandomModule
});

1 个答案:

答案 0 :(得分:1)

快速而肮脏的方式

对于模块系统和相对路径,

可能有一些意想不到的怪癖,我还没有用它来说:

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)的所有模块视为来自特定网址。从您的首页开始,例如:

<script src="dojo/dojo.js" 
    data-dojo-config="packages:[{name:'myext',location:'//host/js/myext'}], async: 1, >
</script>

这可以让您大大改善您的第一个示例:

require([ "myext/mod1/mod2" ],function(mod2){

});

如果您使用的是Dojo Bootstrap安装,则可以避免触摸data-dojo-config,而是将其放在run.js启动文件中:

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