0

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

Firebug 报告以下错误

错误:类型错误:无法将undefined转换对象源文件: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

4

2 回答 2

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

于 2012-07-24T21:14:55.547 回答
1

我们对错误发生的原因进行了一些挖掘,显然这是由于Google Maps Javascript API的更新。我们发现永久修复是通过向v: "3.8"ajax 请求添加 a 来请求特定版本的 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'); }
});

根据文档,如果未指定版本,则 Google 会返回最新的夜间版本。事实上,他们特别指出:

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

正如我们所见,最新版本的 3.9 破坏了与 Google Maps 数据类型的兼容性,因此出现了错误。

更新:Google Maps DataType 2.0.5 版现已推出,其中包含上述修复。感谢李凯莱赫!

于 2012-07-25T17:53:16.253 回答