2012-12-12 5 views
1

나는 자바 스크립트에 익숙하지 않다. 구글 V2에서 구글 V3으로 마이 그 레이션하고 싶다. V2에서 약간 사용되는 방법을 바꿀 뿐이다. 그러나 변경하려고 할 때 addListener V2에서 V3로 나는 v2와 같은 문제에 직면하고 있습니다. 동일한 청취자가 마커를 맵에 두는 데 사용되지만, V3에 관해서는 마커를 맵에 놓을 수 없습니다. 여기에 v2 코드와 V3 코드가 게시됩니다. 계속해서 문제를 해결하도록 도와주세요. V2는 다음과 같습니다구글 V3 클릭 목록 수신자

GEvent.addListener(map, "click", function(marker, point) { 
       console.debug('after Click map is '+map+' marker is '+marker+' point is '+point); 
       if (marker) { 
         if(PolygonMarkers.length == 1){ //Only one marker in the array 
          map.removeOverlay(PolygonMarkers[0]); 
          map.removeOverlay(PolygonMarkers[0]); 
          PolygonMarkers = []; 
          if(Polygon){map.removeOverlay(Polygon)}; 
         } else{      /*More then one marker*/ 
          var RemoveIndex = -1; 
          var Remove; 
          //Search for clicked Marker in PolygonMarkers Array 
          for(var m=0; m<PolygonMarkers.length; m++) 
          { 
           if(PolygonMarkers[m].getPoint().equals(marker.getPoint())) 
           { 
            RemoveIndex = m; Remove = PolygonMarkers[m]; 
            break; 
           } 
          } 
          //Shift Array elements to left 
          for(var n=RemoveIndex; n<PolygonMarkers.length-1; n++) 
          { 
           PolygonMarkers[n] = PolygonMarkers[n+1]; 
          } 
          PolygonMarkers.length = PolygonMarkers.length-1 //Decrease Array length by 1 
          map.removeOverlay(Remove); //Remove Marker 
          geofencedetails.drawPolygon(); //Redraw Polygon 
          } 

         allMarkers = PolygonMarkers; 

        } else { 
        // Adds a new Polygon boundary marker 
         var markerOptions = { icon: icon, draggable: true }; 
         var marker = new GMarker(point, markerOptions); 
         PolygonMarkers.push(marker); //Add marker to PolygonMarkers array 
         map.addOverlay(marker); //Add marker on the map 
         GEvent.addListener(marker,'dragstart',function(){ //Add drag start event 
          marker.setImage(icon.image); 
          polygon_resizing = true; 
         }); 
         GEvent.addListener(marker,'drag',function(){ 
          geofencedetails.drawPolygon(); 
          }); //Add drag event 
         GEvent.addListener(marker,'dragend',function(){ //Add drag end event 
          marker.setImage(icon.image); 
          polygon_resizing = false; 
          geofencedetails.drawPolygon(); 
         }); 
         geofencedetails.drawPolygon(); 

         allMarkers = PolygonMarkers; 
       } 
       });` 

및 V3 당신은 대신지도의 마커에 클릭 이벤트를 바인드해야

 google.maps.event.addListener(map, "click", function(marker, point) { 
      if (marker) { 
       //console.debug('marker '+marker.toSource()); 
       if(PolygonMarkers.length == 1){ //Only one marker in the array 
        map.removeOverlay(PolygonMarkers[0]); 
       map.removeOverlay(PolygonMarkers[0]); 
       PolygonMarkers = []; 
       if(Polygon){ 
        map.removeOverlay(Polygon) 
       }; 
       }else {      /*More then one marker*/ 
        //console.debug('PolygonMarkers.length is '+PolygonMarkers.length); 
        var RemoveIndex = -1; 
        var Remove; 
        //Search for clicked Marker in PolygonMarkers Array 
        for(var m=0; m<PolygonMarkers.length; m++){ 
         //console.debug('PolygonMarkers['+m+'] '+PolygonMarkers[m]); 
         if(PolygonMarkers[m].getPosition().equals(marker.getPosition())){ 
          //console.debug('Both are equal '); 
          RemoveIndex = m; 
          Remove = PolygonMarkers[m]; 
          break; 
         } 
        } 
        //Shift Array elements to left 
        for(var n=RemoveIndex; n<PolygonMarkers.length-1; n++){ 
         PolygonMarkers[n] = PolygonMarkers[n+1]; 
        } 
        PolygonMarkers.length = PolygonMarkers.length-1 //Decrease Array length by 1 
        /*map.removeOverlay(Remove); //Remove Marker*/ 
        for (var i = 0; i < allMarkers.length; i++) { 
         allMarkers[i].setMap(null); 
        } 
        geofencedetails.drawPolygon(); //Redraw Polygon 
       } 

       allMarkers = PolygonMarkers; 

      } else { 
       //console.debug('In else block'); 
       // Adds a new Polygon boundary marker 
       var markerOptions = { icon: icon, draggable: true }; 
       //console.debug('1'); 
       var marker = new GMarker(point, markerOptions); 
       //console.debug('2'); 
       PolygonMarkers.push(marker); //Add marker to PolygonMarkers array 
       //console.debug('3'); 
       map.addOverlay(marker); //Add marker on the map 
       //console.debug('4'); 
       GEvent.addListener(marker,'dragstart',function(){ //Add drag start event 
        //console.debug('5'); 
       marker.setImage(icon.image); 
       //console.debug('6'); 
       polygon_resizing = true; 
       }); 
       GEvent.addListener(marker,'drag',function(){ 
        geofencedetails.drawPolygon(); 
       }); //Add drag event 
       GEvent.addListener(marker,'dragend',function(){ //Add drag end event 
        marker.setImage(icon.image); 
       polygon_resizing = false; 
       geofencedetails.drawPolygon(); 
       }); 
       geofencedetails.drawPolygon(); 

       allMarkers = PolygonMarkers; 
      } 
     }); 

답변

1

입니다. Google지도 API V3 내

google.maps.event.addListener(marker, "click", function(event) { .... }); 

UI 이벤트는 일반적으로 이벤트가 발생했을 때에 UI 상태를 알리는 이벤트 리스너를 사용해 액세스 할 수있는 이벤트 인수를 전달합니다. 예를 들어 UI '클릭'이벤트 은 일반적으로지도에서 클릭 한 위치 인 을 나타내는 latLng 속성이 포함 된 MouseEvent를 전달합니다. 이 동작은 UI 이벤트에서만 발생합니다. MVC 상태 변경은 이벤트에서 인수를 전달하지 않습니다.

+0

여기에 마커가 null인데, 내가 제안을 따르는 경우지도에서 iclick이 발생하지 않으며 BTW가 처음으로 null이되어야하고 3 번째 다른 블록으로 이동하고 마커가 API에 따라 맵에 추가됩니다. V2. 동일한 코드를 사용해야하며 기존 코드 만 수정하면됩니다. – venkat

+0

v3에서는 그렇게 작동하지 않습니다. 네가 다른 두 가지가 필요한 것처럼 들린다. 1)지도를 클릭하면 마커가 추가됩니다. 2) 그 마커를 클릭하면, 뭔가를하십시오. 클릭을 처리하고 마커를 추가 한 후 마커 인스턴스의 리스너를 사용하여 다른 작업을 수행 할지도 상에 두 개의 리스너가 필요합니다. – Rick

관련 문제