Могу ли я поместить функции карты Google в замыкание? - PullRequest
9 голосов
/ 10 февраля 2010

Я пытаюсь написать некоторые функциональные возможности карты Google и поиграть с замыканиями javascript, чтобы попытаться организовать и структурировать мой код лучше.

У меня есть следующий код:

var gmapFn ={
    init : function(){
        if (GBrowserIsCompatible()) {
            this.mapObj = new GMap2($("#map_canvas"));
            this.mapObj.setCenter(new google.maps.LatLng(51.512880,-0.134334),16);
        }
    }
}

Потом я позвоню в готовый документ jquery:

$(document).ready(function() {
    gmapFn.init();
})

Я настроил ключи карты Google, но я получаю сообщение об ошибке на main.js:

необработанное исключение: [Exception ... "Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE)" nsresult: "0x80004005 (NS_ERROR_FAILURE)" расположение: "JS frame :: http://maps.gstatic.com/intl/en_ALL/mapfiles/193c/maps2.api/main.js :: ig :: строка 170 "данные: нет] QO ()

Кажется, ошибка возникает в тесте GBrowserIsCompatible (), который, как я полагаю, зависит от меня, используя это замыкание, есть ли способ сохранить его в замыкании и заставить init () работать?

1 Ответ

15 голосов
/ 10 февраля 2010

В вашем коде или реализации нет ничего плохого, за исключением того факта, что GMap2 не может использовать объект jQuery в качестве ссылки. Используйте старый добрый document.getElementById("map_canvas").

Кроме того, вы можете использовать $("#map_canvas")[0] или $("#map_canvas").get(0) для ссылки на фактический элемент DOM и передать его конструктору GMap2, если вы хотите быть совместимым с вашим использованием jQuery.

Кстати, вы, кажется, смешиваете v2 с v3, например new google.maps.LatLng() против new GLatLng().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...