作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 Bing 鸟瞰图绘制到 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
和所有后续脚本?
最佳答案
问题在于,当 Bing map api 加载时,它会下载几个附加文件。最初下载的文件将在下载 Bing map 控件的其他资源时触发 onLoad 函数,这就是为什么 onLoad 函数在 Microsoft.Map 命名空间完全发挥作用之前触发的原因。有几种方法可以处理这个问题。一种方法是在 onLoad 函数中使用超时,该函数在触发时检查 Microsoft.Maps 命名空间是否可用以及 Microsoft.Maps.Map 对象是否未定义。如果这些测试失败,则在短时间内再次触发超时。如果它们有效,则调用您要运行的函数来加载 map 。
我还在这里整理了一篇关于延迟加载 map 控件的博客文章:http://rbrundritt.wordpress.com/2011/11/20/bing-maps-v7-control-lazy-loader/
关于javascript - Ext.Loader.loadScript 回调调用得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20847559/
我是一名优秀的程序员,十分优秀!