Расширение классов API карты Google (или создание оболочек) - PullRequest
0 голосов
/ 03 июля 2011

По сути, я хотел добавить несколько пользовательских методов в классы google.maps.Map и Rectangle. Я не мог этого сделать, поэтому я решил создать классы-обертки, но столкнулся с одной проблемой

function MyClass() {

  this.redraw_map = function() {draw something};
  this.current_map = new google.maps.Map();  

  google.maps.event.addListener(this.current_map, 'bounds_changed', function() {
    redraw_map();
  });
}

Мой метод redraw_map () не виден в функции обработки событий, если я не поместил метод перерисовки вне MyClass. Я планирую перейти на более продвинутый способ написания JS-приложений, таких как Backbone, но сначала мне нужно понять, как преодолеть такие проблемы.

Спасибо за чтение.

1 Ответ

1 голос
/ 14 июля 2011

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

Это решит вашу проблему:

function MyClass() {

    this.redraw_map = function() {draw something};
    this.current_map = new google.maps.Map();  

    // Reference to current scope
    var self = this;

    google.maps.event.addListener(this.current_map, 'bounds_changed', function() {
        // This will call the function that you defined in your scope above
        self.redraw_map();
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...