谷歌地图数据类型抛出类型错误:can't将未定义转换为对象

Google maps data type throws Type Error: can't convert undefined to object

本文关键字:未定义 转换 对象 数据类型 类型 错误 can 谷歌地图      更新时间:2024-01-22

在我们所有的Umbraco网站中,谷歌地图数据类型已不起作用。直到昨天,这一切都很完美,但今天只有输入字段和位置字段,没有谷歌地图。。。

Firebug报告以下错误

错误:TypeError:无法将未定义转换为对象源文件:http://mydomain.com/WebResource.axd?d=tKK1ZgJBCMotVXJtV8pR9xzMqTmklCMezxGDl1po1iuUqd9OAFswOEzHFzCaf_jVz-AUweHtY9QXIBqtRjeITKZJW8DsgNEfWr5d43rOLcGkPLOTDqcjla1Kf5Atxrk4V0fVru8i6pj_kgbZvebWAyHrkbCDipPWDziYWT-lCHW-WaHOcz5hS1DefZvkJSICxqjpdChghoCUZhju3cHg2&t=634759042640000000&cdv=1线路:212

它的在线

context._maps[id] = new UmbracoGoogleMap.map(id, this);

在以下功能中

guiMap: function () {
    var context = this;
    this._apiLoaded = true;
    jQuery('div.gmapContainer').each(function () {
        var id = jQuery('div.map', this).attr('id');
        context._maps[id] = new UmbracoGoogleMap.map(id, this);
        context._maps[id].render();
    });
},

还有很多其他人也报告了同样的问题,但还没有找到解决方案!http://our.umbraco.org/projects/backoffice-extensions/google-maps-datatype/bug-reports/33390-No-map-in-Backend

看起来问题与上下文有关。它被设置为窗口,而不是UmbracoGoogleMapDataType,因为"this"指向了错误的位置。所以我尝试了:

var context = UmbracoGoogleMapMapDataType;
this._apiLoaded = true;
jQuery('div.gmapContainer').each(function () {
    var id = jQuery('div.map', this).attr('id');
    context._maps[id] = new UmbracoGoogleMap.map(id, this);
    context._maps[id].render();
});

现在看来,这只是一个临时补丁。如果你愿意,你可以从下载dllhttps://www.dropbox.com/s/3aj91cuzxn3rcbu/Our.Umbraco.GoogleMaps.zip

我们深入了解了错误发生的原因,显然是由于Google Maps Javascript API的更新。我们发现,永久性的解决方案是通过向ajax请求添加v: "3.8"来请求特定版本的API:

UmbracoGoogleMap.loadMapsApi = function (cb) {
    jQuery.ajax({
        type: "get",
        dataType: "script",
        url: 'http://maps.google.com/maps/api/js',
        data: {
            v: "3.8",
            sensor: false,
            callback: cb
    },
    error: function () { alert('Could not load Google Maps API'); }
});

根据文档,如果没有指定版本,那么谷歌会返回最新的夜间版本。事实上,他们特别指出:

生产应用程序应始终指定次要版本(如3.7、3.8等)。

正如我们所看到的,3.9的最新版本破坏了与谷歌地图数据类型的兼容性,从而导致了错误。

更新:谷歌地图数据类型2.0.5版本现已可用,并包含上述修复程序。感谢Lee Kelleher!