2014-07-11 2 views
0

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 이벤트가 발생한다는 것입니다.

무슨 일이 일어날 지 아는 사람이 있습니까?

더 많은 코드가 필요하거나 자세한 설명이 필요하면 질문하십시오.

답변

0

나는 새로운 마커를 정의하지 않는다고 생각합니다. 하지만 더 많은 코드를 추가하지 않으면 알 수 없습니다. 전화를 걸 때

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

이 마커는 여전히 첫 번째 마커입니다. (왜 마커를 클릭하면 동일한 마커로지도가 다시 채워지는지). MarkerRota 클래스에 새 마커를 만드시겠습니까? 당신이 이미 있지 않는 한.

+0

MarkerRota는 Marker 클래스를 확장하며이 클래스에는 init() 함수가 있습니다. init() 함수에서 나는 google.maps.Marker 객체를 만듭니다. –

+0

this.map.removeMarkers()가 보려는 마커를 제거하지 않았는지 확인합니다. init에서 마커를 사용하지 않는 한 배열에 마커를 추가하는 것을 보지 못합니다. init에서이 작업을 수행하는 경우 init 내부에 리스너를 추가하거나 init 앞에 리스너를 추가해야합니다. –

관련 문제