Попытка вызова метода класса в обратном вызове события щелчка маркера Google Maps, в jQuery - PullRequest
0 голосов
/ 07 марта 2012

У меня есть класс в jQuery, который обрабатывает карту Google и ее маркеры. После каждого создания маркера я добавляю прослушиватель кликов для каждого маркера:

var marker = new google.maps.Marker(options);
google.maps.event.addListener(marker, "click", function(event) {
    //Do something with event
});

Однако вместо этого я хотел бы использовать функцию из класса:

google.maps.event.addListener(marker, "click", this.onVehiculeClick.bind(this));
onVehiculeClick: function(event) {
    console.log(this);
    console.log(event);
    //Do something with event
}

Он хорошо работает на Firefox и Chrome: он регистрирует это (мой объект) и событие карты Google. Но не в Safari или IE (а также в некоторых других версиях Firefox): он не вызывает метод onVehiculeClick, и если я добавляю console.log сразу после google.maps.event.addListener, ничего не выводится.

Если я удаляю часть .bind (this) , метод вызывается, но я теряю контекст this и this будет обозначать карту Google объект. Я также попытался добавить var, который = this в конструктор, но он не определен в контексте метода.

Я нашел кое-что, что, как мне кажется, могло бы помочь мне: Google Maps JS API v3: необходимо получить доступ к объекту маркера из обработчика событий , но он использует прототип, и я не могу найти никакого эквивалента метод карри в jQuery.

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 08 марта 2012

Попробуйте изменить метод addVehicule следующим образом:

    addVehicule: function(vehicule) {
    try {
        var marker = this.addMarker(vehicule.latitude, vehicule.longitude);
        var that = this;
        //Observe clicks on vehicule
        google.maps.event.addListener(marker, "click", function(event){
            that.onVehiculeClick(event)
        });

        this.vehicules.push(vehicule);
    } catch (error) {}
}
...