Как мне получить доступ к глобальным переменным, которые установлены внутри слушателя событий? - PullRequest
0 голосов
/ 18 декабря 2010

Я работаю с Google Maps API V3. Мне нужно получить значения getSouthWest & getNorthEast границ моей карты. Для этого необходимо вызвать событие «bounds_changed», чтобы получить новые значения. Это все хорошо, однако мне нужно получить доступ к этим значениям извне события и передать функции на стороне сервера (точнее, я не хочу вызывать функцию на стороне сервера каждый раз, когда изменяются границы карты).

Мой код:

//Global
var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

    });

    CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
}

При выполнении этого кода я получаю сообщение об ошибке sw is undefined.

Если кто-нибудь знает, как я могу обойти эту проблему с помощью текущего метода; или получить доступ к функции getBounds() без использования события, тогда я был бы очень признателен!

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Для меня это похоже на время, а не на область видимости.

  1. Ваша функция запускается и добавляет обработчик
  2. Затем он пытается получить доступ к sw, который не определен (как это было, когда он был объявлен)
  3. Тогда событие может сработать и установить sw.

Полагаю, возможно, что API меняет ссылку на один объект, и вы держитесь за это, но это кажется маловероятным. Если это так, попробуйте сохранить значения lat и lng вместо nw и sw, поскольку они являются числовыми примитивами.

Однако вы должны иметь доступ к карте вне мероприятия. Это выглядит так просто, как:

function myFunc() {
  var searchBounds = map.getBounds();
  var sw = searchBounds.getSouthWest();
  var ne = searchBounds.getNorthEast();

  CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
}
0 голосов
/ 18 декабря 2010

Я предполагаю, что вы на самом деле определяете переменные?Они закомментированы в вашем коде ...

при условии, что они определены правильно, возможно, они не того типа, который вы ожидали - например, может присутствовать sw, а заполненный ut может не иметь lat() property - возможно latitude()?

Попробуйте проверить объект sw в отладчике после изменения границ (аддон firebug в firefox очень хорош для этого)

Редактировать как свойКод был изменен:

Вы вызываете серверную функцию до вызова функции изменения границ ...

Попробуйте:

var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

        //Moved inside the event handler
        CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());

    });

}
...