Google地图数据类型抛出类型错误:无法将undefined转换为对象

时间:2012-07-24 15:13:42

标签: javascript asp.net google-maps umbraco webresource.axd

在我们所有的Umbraco网站中,Google地图数据类型不再有效。这一直到昨天都很完美,但今天只有输入字段和位置字段,而不是谷歌地图......

Firebug报告以下错误

错误:TypeError:无法将undefined转换为object 源文件:http://mydomain.com/WebResource.axd?d=tKK1ZgJBCMotVXJtV8pR9xzMqTmklCMezxGDl1po1iuUqd9OAFswOEzHFzCaf_jVz-AUweHtY9QXIBqtRjeITKZJW8DsgNEfWr5d43rOLcGkPLOTDqcjla1Kf5Atxrk4V0fVru8i1i6pj_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

2 个答案:

答案 0 :(得分:2)

看起来问题与上下文有关。它被设置为窗口而不是UmbracoGoogleMapMapDataType,因为“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();
});

现在这似乎是一个临时补丁。如果您愿意,可以从https://www.dropbox.com/s/3aj91cuzxn3rcbu/Our.Umbraco.GoogleMaps.zip

下载dll

答案 1 :(得分:1)

我们做了一些挖掘错误的原因,显然这是由于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'); }
});

根据documentation,如果未指定版本,则Google会返回最新的每晚版本。事实上,他们明确指出:

  

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

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

更新: Google Maps DataType版本2.0.5现已推出并包含上述修复程序。感谢Lee Kelleher!