dojo.addOnLoad()永远不会在GWT页面中触发

时间:2011-11-08 18:34:59

标签: javascript gwt dojo

我正在尝试在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中托管已编译的项目没有任何区别。

2 个答案:

答案 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);