我正在尝试将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控制台,则会加载所有内容。
这是一个错误吗?
是否有其他方法可以延迟回调函数,直到url
和所有后续脚本都被加载?
答案 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/