2011-11-22 95 views
1

我对Dojo很新,而且遇到了dojo.require()的问题。我正在使用托管在云中的Dojo版本。我想用dojo.require()加载我自己的模块,但这似乎并不奏效。我已经设置了basUrl,但每当我尝试加载模块时,都会遇到有关访问跨域资源的错误(并且在实际发生此错误之前需要一段时间)。它正在尝试加载的文件是我请求的模块。当我调试时,我可以忽略这个错误,并且我的模块仍然正确加载。但我无法找出到底为什么道场试图加载的东西跨域...Dojo.require()试图加载跨域资源

这是我的HTML文件的文件头的样子:

<script type="text/javascript"> 
    var dojoConfig = { 
     isDebug: true, 
     baseUrl: '../../' 
    }; 
</script>  

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js.uncompressed.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    dojo.require("client.apps.customers.overview"); 

    dojo.ready(function() { 
     overview.open(); 
    }); 
</script> 

“client.apps.customers。概述“是我正在尝试加载的模块。这究竟是怎么overview.js文件的开头是这样的:

dojo.provide("overview"); 

dojo.require("dijit._Widget"); 
dojo.require("dijit._Templated"); 
+2

跨域模块是那些“在云中”,而不是你自己的。你可以在这里发布你的头部部分,看看你如何配置dojo以及你如何满足你的需求? – Philippe

回答

1

嗯,overview.js需要放置在客户端/应用/用户/(相对于你的baseUrl)文件,和dojo.provide必须给出全部命名空间和类的调用。你的情况:

dojo.provide("client.apps.customers.overview"); 
+0

我试过这个,但它仍然不起作用。看来Dojo实际上是试图加载“client.apps.customers.overview”作为跨域资源。 – svb

+0

@svb:奇怪。只是为了检查,你可以尝试使用djConfig而不是dojoConfig吗? – Frode

+0

@svb或者如果它更方便,在应用程序加载完成后在萤幕控制台中运行'alert(dojo.config.baseUrl);'。我建议这样做的原因是,此线程暗示可能存在djConfig/dojoConfig迁移错误:http://dojo-toolkit.33424.n3.nabble.com/dojoConfig-scopeMap-how-td3215933.html – Frode

1

除了匹配的要求,并提供报关单的弗罗德的建议,我认为你需要添加额外的配置告诉道场在哪里可以找到“客户”命名空间:

dojoConfig = { 
    /*...*/, 
    modulePaths: { 
     client: 'path_to_the_client_folder' 
    } 
}; 

您可以通过在Firebug/Chrome控制台上查看当您尝试访问何种资源时执行请求调用,从而检查是否存在错误。我相信它可能会在默认位置http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/client(dojo,dijit和dojox旁边)中搜索“客户端”模块,但是您的模块将确定位于其他位置。