Ext.Loader.loadScript回调调用太快了

时间:2013-12-30 21:05:26

标签: javascript extjs extjs4.2 bing-maps

我正在尝试将Bing Bird's Eye View地图绘制到ExtJS窗口中。我想在创建窗口之前加载脚本,所以我正在使用Ext.Loader.loadScript:

Ext.Loader.loadScript({
    url: 'http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0',
    onLoad: function () {
        console.log(Microsoft.Maps.MapTypeId.birdseye);
    }
});

问题是onLoad回调在Microsoft Maps对象完全加载之前执行,因此Microsoft.Maps.MaptypeId未定义。如果我在几秒钟后打开一个Web控制台,则会加载所有内容。

  1. 这是一个错误吗?

  2. 是否有其他方法可以延迟回调函数,直到url和所有后续脚本都被加载?

1 个答案:

答案 0 :(得分:0)

问题是,当Bing Maps api加载时,它会下载几个额外的文件。最初下载的文件将触发onLoad函数,同时正在下载Bing Maps控件的其他资源,这就是为什么在Microsoft.Map命名空间完全正常工作之前你的onLoad函数被触发的原因。有几种方法可以解决这个问题。一种方法是在onLoad函数中使用超时,当触发检查以查看Microsoft.Maps命名空间是否可用且Microsoft.Maps.Map对象未定义时。如果这些测试失败,则在短时间后再次触发超时。如果它们有效,则调用要运行的函数以加载映射。

我还在这里整理了一篇关于延迟加载地图控件的博文:http://rbrundritt.wordpress.com/2011/11/20/bing-maps-v7-control-lazy-loader/