Типы данных Google maps выдает Ошибка типа: невозможно преобразовать неопределенный объект

На всех наших сайтах Umbraco больше не работает тип данных карт Google. До вчерашнего дня это работало идеально, но сегодня есть только поле ввода и поле местоположения, а не карты Google...

Firebug сообщает о следующей ошибке

Ошибка: Ошибка тип: не может преобразовать неопределенный объект Source File: http://mydomain.com/WebResource.axd?d=tKK1ZgJBCMotVXJtV8pR9xzMqTmklCMezxGDl1po1iuUqd9OAFswOEzHFzCaf_jVz-AUweHtY9QXIBqtRjeITKZJW8DsgNEfWr5d43rOLcGkPLOTDqcjla1Kf5Atxrk4V0fVru8i1i6pj_kgbZvebWAyHrkbCDipPWDziYWT-lCHW-WaHOcz5hS1DefZvkJSICxqjpdChghoCUZhju3cHg2&t=634759042640000000&cdv=1 Line: 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 ответа

Решение

Похоже, проблема была связана с контекстом. Это было установлено в окно, а не UmbracoGoogleMapMapDataType как "это", указывающее на неправильное место. Итак, я попробовал:

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();
});

И это теперь, кажется, работает как временный патч. Если вы хотите, вы можете скачать DLL с https://www.dropbox.com/s/3aj91cuzxn3rcbu/Our.Umbraco.GoogleMaps.zip

Мы кое-что выяснили, почему возникла ошибка, и, видимо, это связано с обновлением API JavaScript Карт Google. Мы обнаружили, что постоянное исправление заключается в запросе определенной версии API путем добавления v: "3.8" на запрос AJAX:

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 и, следовательно, ошибка.

Обновление: версия 2.0.5 типа данных Google Maps теперь доступна и содержит вышеуказанное исправление. Спасибо Ли Келлехеру!

Другие вопросы по тегам