может ли обратный вызов из GetLocations () (из API Карт Google) вызвать что-либо кроме функций API?

1

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

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

Обновление

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

Javascript использует структуру прототипа для выполнения своего рода OO, а функция, которую нужно вызвать, называется "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 и не понимаю прототипа или как он работает, поэтому я понятия не имею, как это решить. Кто-нибудь знает?

  • 1
    Я думаю, что ваш код использует свойство prototype Javascript, а не инфраструктуру prototype. Там, где вы видите прототип в своем коде выше, вы добавляете функцию SetLocation () в mapObject. В вашем коде происходит нечто большее, чем я могу видеть здесь. Вы можете опубликовать больше?
  • 0
    о, я не знал, что есть разница между собственностью и каркасом. Код включает в себя prototype.js, так что я думаю, что он также использует фреймворк. Я бы опубликовал больше кода, но я уже сильно его изменил - я реструктурировал его и в итоге заставил его работать. Спасибо за помощь, хотя.
Теги:
callback
google-maps

2 ответа

3
Лучший ответ

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню