javascript - Ext.Loader.loadScript 回调调用得太早

标签 javascript extjs extjs4.2 bing-maps

我正在尝试将 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 控制台,所有内容都会加载。

  1. 这是一个错误吗?

  2. 是否有另一种方法可以延迟回调函数,直到加载 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/

相关文章:

javascript - Jquery $ 标记转义

extjs - 在 Sencha Architect 3.0 中创建自定义 vType

Extjs的Panel的Item没有改变

javascript - 跳转到网格面板中的行的问题

extjs - extjs4.1中initComponent函数有什么用?

javascript - 在 ExtJS 中禁用时区转换

javascript - 从 JSON 中删除新行

javascript - 检测所有 CSS 规则何时被应用和绘制

javascript - 在完成 Rxjs Observable 之前,如何等待 subscribe 中定义的异步方法?

Extjs 在容器中动态包装项目