может ли обратный вызов из GetLocations () (из API Карт Google) вызвать что-либо кроме функций API? - PullRequest
1 голос
/ 14 июля 2009

Я работаю в Javascript над проектом API Карт для работы. У меня возникли проблемы с функцией обратного вызова, которую я передаю GetLocations, в которой она должна вызывать другой кусок кода (все, что делает обратный вызов, - это сохранять значения lat и lng в объекте). Но после того, как функция выполняет свою работу, следующая функция не вызывается.

Как работает этот обратный вызов? Почему я не могу вызвать какие-либо функции из него? Что может я в ней делаю?

обновление

Хорошо, тестовая функция (которая только что создала окно предупреждения), которую я использовал, снова начала работать магическим образом, и я проверил журнал ошибок (который я забыл существовать раньше), чтобы увидеть, что происходит не так.

Javascript использует прототипную структуру для выполнения некоторого ОО, и функция, которую нужно вызвать, называется "this.Create". Ошибка говорит, что такой функции нет, но она позволяет мне вызывать ее из другого места в коде:

for (var i=0;i<mapObjects.length;i++) {
    mapObjects[i] = new mapObject(mapObjects[i]);
    mapObjects[i].Create(); //this works
}



mapObject.prototype.SetLocation=function (response) {
    this.geoStatusCode = response.Status.code;
    alert("entered SetLocation with status code "+this.geoStatusCode);
    if (this.geoStatusCode == 200) {
        this.lat = response.Placemark[0].Point.coordinates[1];
        this.lng = response.Placemark[0].Point.coordinates[0];
        alert("calling create()");
        this.Create(); //"no such function"
    } else {
        this.geofailed++;
    }

}

Я не очень знаком с Javascript и не очень разбираюсь в прототипе или в том, как он работает, поэтому я понятия не имею, как это решить. Кто-нибудь знает?

Ответы [ 2 ]

3 голосов
/ 14 июля 2009

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

var map;
var geocoder = new GClientGeocoder();

function addAddressToMap(response) {
    map.clearOverlays();
    if (!response || response.Status.code != 200) {
        alert("\"" + address + "\" not found");
    } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
        marker = new GMarker(point);
        map.addOverlay(marker);
        marker.openInfoWindowHtml(place.address + '<br><b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
        // DO WHATEVER YOU WANT HERE
    }
}

geocoder.getLocations("New York City", addAddressToMap);

Кроме того, вы можете напечатать функцию обратного вызова в строке:

var map;
var geocoder = new GClientGeocoder();

geocoder.getLocations(address, function() {
    map.clearOverlays();
    if (!response || response.Status.code != 200) {
        alert("\"" + address + "\" not found");
    } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
        marker = new GMarker(point);
        map.addOverlay(marker);
        marker.openInfoWindowHtml(place.address + '<br><b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
        // DO WHATEVER YOU WANT HERE
    }
});
1 голос
/ 14 июля 2009

Вы можете вызывать другие функции javaScript из обратного вызова GetLocations . Я предлагаю вам загрузить свою страницу в Firefox и проверить журнал ошибок. Если ваши проблемы сохраняются, отправьте код здесь, и мы надеемся, что мы поможем.

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