我正在尝试通过dojo.require
使用由Dojo加载的Esri ArgGis JavaScript API。我有一个现有的模块化AMD/requirejs Typescript应用程序,我需要将这些代码集成到其中。在我的初始TS文件的顶部,我导入了几个模块:
import tracer = module('../classes/trace');
import pubsub = module('../classes/pubsub');
import masker = module('../classes/masker');
// etc.
这很好用,但是现在我已经添加了ArcGis代码,而不是解析我的应用程序中的相对路径,require.js从Esri站点选择了一个baseUrl,并尝试加载:
http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/esri/classes/trace.js
// etc.
导致404个响应和脚本错误的字符串。
我该如何解决这个问题呢?
在加载第一个加载模块的文档之前,我已经尝试在html文件的头部设置baseUrl:
<script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3"></script>
<script type="text/javascript" src="/content/client/libs/require.js"></script> <!-- data-main="/content/client/hop/hop.app" -->
<script type="text/ecmascript">
require.config({
baseUrl: "/Content/client/hop/"
});
</script>
<script src="~/Content/client/hop/hop.app.js"></script>
但是这失败了,抛出了一个需要没有方法配置的异常。
(注意,如果我颠倒了html文档头中的顺序,使arcgis api在加载序列中最后出现,那么我会得到相反的问题-我的本地文件都工作得很好,但dojo和映射api失败了,因为它们在argis服务器上搜索时,正在查找相对于我的站点的路径)。
发布于 2013-03-13 16:24:47
我使用的是Esri的ArcGIS应用程序接口,所以我遇到了这个问题。dojo的This博客文章给了我一些帮助。
第一个问题是,dojo的配置方式与requirejs不同。它寻找一个先前定义的dojoConfig来进行设置。第二,Esri的模块加载都是在假设一个基本路径的情况下设置的,而您的代码将需要另一个基本路径。您将需要一个类似如下的dojo配置:
dojoConfig = {
baseUrl: location.pathname.replace(/\/[^/]+$/, '') + '/Content/client/hop/', // magic!
packages: [
{
name: 'dojo',
location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojo/"
},
{
name: 'dojox',
location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojox"
},
{
name: 'esri',
location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/esri"
}
]
};
这样做的目的是将basepath设置回当前的url加上额外的内容,然后告诉dojo esri的内容在哪里。这就是我遇到的所有包,但是如果我错过了一个依赖项,因为它从来没有为我加载过,那么它将需要一个类似的条目。
您可能会遇到的另一个问题是,如果您习惯于在本地将脚本加载为file://,现在来自另一个域的dojo将尝试访问file://,而浏览器将立即关闭该文件。从现在开始,您需要在本地http服务器上进行测试。在Windows上我更喜欢HFS,在Linux上我更喜欢python makes it easy。
我希望这能帮到你。
发布于 2013-03-13 16:15:53
https://stackoverflow.com/questions/15386284
复制