Google Maps API의 addListener를 사용할 때 몇 가지 문제가 있습니다.Google Maps API의 이벤트 내부 이벤트
처음에는 약간의 마커를로드하고 난 다음과 같이 모두 하나의 이벤트 리스너를 첨부 :
google.maps.event.addListener(this.marker, 'click', function() {
var points = new cRota().loadRotaFromVeiculo(this.id_veiculo,
$("#txtDataInicial").val(),
$("#txtDataFinal").val(),
$("#txtHora1").val(),
$("#txtHora2").val()
);
this.map.removeMarkers();
this.map.removeRoutes();
this.map.removePolylines();
this.polyline = new Polyline();
this.polyline.setMap(this.map);
this.polyline.setPoints(points);
if (this.polyline.init()) {
//Adiciona a polyline no mapa
this.map.addPolyline(this.polyline);
}
//Cria o window info para mostrar as informações da rota
this.info_window = new InfoWindow();
this.info_window.setMap(this.map);
this.info_window.init();
//Adiciona um marker pra cada ponto da polyline
var marker_rota = new MarkerRota();
marker_rota.setDataLocalizacao(points[0].data_localizacao);
marker_rota.setVelocidade(points[0].velocidade);
marker_rota.setLatitude(points[0].latitude);
marker_rota.setLongitude(points[0].longitude);
marker_rota.setMap(this.map);
marker_rota.setIcon("m5.png");
marker_rota.init();
marker_rota.addListener();
//Adiciona no mapa
this.map.addMarker(marker_rota);
};
내가 어떤 마커를 클릭
, 나는 웹 서비스에서 데이터를로드하고 폴리 라인을 만들 수 있습니다. 폴리선을 작성한 후MarkerRota
클래스를 인스턴스화합니다. 이 클래스는
Marker
이라는 또 다른 클래스를 확장합니다.
지도에서 하나의 마커를 클릭하면 이벤트가 실행되고이 모든 작업을 수행하여 폴리 라인 및 기타 마커를 만듭니다.
다른 마커에는 다른 것들을 실행하기위한 addListener가 있습니다.
그러나 이전에 생성 된 일부 마커를 클릭하면 MarkerRota
에 의해 생성 된 다른 마커의 이벤트가로드되지 않고 문제가 발생합니다. 여기
MarkerRota
MarkerRota.prototype.addListener = function() {
//Copia a classe para uma var
var that = this;
//Adiciona o evento do click do marker
google.maps.event.addListener(this.marker, "click", (function() {
window.alert("TEST");
}));
};
속성 this.marker
은 google.maps.Marker 유형의 목적은 클래스 내 함수의 코드입니다.
또 다른 이상한 일은 첫 번째 마커를 클릭하면 다른 마커가 다시 생성되고 click 이벤트가 발생한다는 것입니다.
무슨 일이 일어날 지 아는 사람이 있습니까?
더 많은 코드가 필요하거나 자세한 설명이 필요하면 질문하십시오.
MarkerRota는 Marker 클래스를 확장하며이 클래스에는 init() 함수가 있습니다. init() 함수에서 나는 google.maps.Marker 객체를 만듭니다. –
this.map.removeMarkers()가 보려는 마커를 제거하지 않았는지 확인합니다. init에서 마커를 사용하지 않는 한 배열에 마커를 추가하는 것을 보지 못합니다. init에서이 작업을 수행하는 경우 init 내부에 리스너를 추가하거나 init 앞에 리스너를 추가해야합니다. –