我正在尝试在GWT项目中加载基本的ESRI ArcGIS地图。 javascript ArcGIS API是用Dojo编写的,似乎要求您使用dojo.addOnLoad()来确保初始化地图对象的代码在ArcGIS API完全初始化之后才会运行。代码如下所示:
var map;
dojo.require("esri.Map");
function init() {
map = new esri.Map("mapDiv");
var basemapURL= "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
var basemap = new esri.layers.ArcGISTiledMapServiceLayer(basemapURL);
map.addLayer(basemap);
}
dojo.addOnLoad(init);
问题在于,当我在GWT项目中使用此代码时,它从不调用我传递给dojo.addOnLoad的函数。地图永远不会被初始化并且永远不会出现。我已经使用Firebug验证了正在调用addOnLoad()但是init()不是。
我尝试通过调用计时器中的GWT代码调用init()来解决这个问题,但是只有大约50%的时间。剩下的时间我得到错误“TypeError:dojox.gfx.createSurface不是一个函数”,所以我很确定我在创建竞争条件时会这样做。
在Eclipse中以开发者模式运行项目或在Tomcat中托管已编译的项目没有任何区别。
答案 0 :(得分:2)
您还可以使用gwt-esri库:http://code.google.com/p/gwt-esri/
答案 1 :(得分:1)
在这种情况下,Dojo不是在寻找一个实际的命名函数function init()
,而是一个包含函数var init = function() {...}
的变量。
你想要做的是:
var map;
dojo.require("esri.Map");
var init = function() {
map = new esri.Map("mapDiv");
var basemapURL= "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
var basemap = new esri.layers.ArcGISTiledMapServiceLayer(basemapURL);
map.addLayer(basemap);
}
dojo.addOnLoad(init);