【问题标题】:Ext.Loader.loadScript callback called too soon过早调用 Ext.Loader.loadScript 回调
【发布时间】:2013-12-30 21:05:25
【问题描述】:

我正在尝试将 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 和所有后续脚本都已加载?

【问题讨论】:

  • 对我来说,'Microsoft.Maps.MapTypeId' 始终未定义。

标签: javascript extjs extjs4.2 bing-maps


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2014-03-10
    • 2011-03-22
    • 2012-10-31
    • 2015-12-04
    • 2013-05-28
    • 1970-01-01
    • 2011-11-25
    • 2010-10-26
    相关资源
    最近更新 更多