Javascript dojo.addOnLoad()从不在GWT页面中激发
我正在尝试在GWT项目中加载基本的ESRI ArcGIS地图。javascript ArcGIS API是用Dojo编写的,似乎要求您使用Dojo.addOnLoad()来确保初始化map对象的代码在ArcGIS API完全初始化之前不会运行。代码如下所示:Javascript dojo.addOnLoad()从不在GWT页面中激发,javascript,gwt,dojo,Javascript,Gwt,Dojo,我正在尝试在GWT项目中加载基本的ESRI ArcGIS地图。javascript ArcGIS API是用Dojo编写的,似乎要求您使用Dojo.addOnLoad()来确保初始化map对象的代码在ArcGIS API完全初始化之前不会运行。代码如下所示: var map; dojo.require("esri.Map"); function init() { map = new esri.Map("mapDiv"); v
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中托管编译后的项目没有任何区别。在这种情况下,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);
您还可以使用gwt esri库: