2011-02-01 14 views
7

Ponieważ google maps api v3 nie obsługuje edycji początkowej ani końcowej wielokąta ani polilinii, próbuję utworzyć jeden z moich własnych.można wyłączyć listę zdarzeń bez jej usuwania?

Rysuję znaczniki dla każdego punktu, a następnie kończę edycję Ustawiam wszystkie znaczniki do ukrycia, gdy pierwszy punkt indeksu ("0") jest kliknięty, a następnie ustaw wielokąt na klikalny jest prawdziwy. Ale użytkownik nadal może kliknąć mapę i kontynuować rysowanie wielokąta. Chcę wyłączyć tę listę zdarzeń, ale ponownie włączyć ją myszką. Czy można to zrobić? Jeśli używam opcji Remove Listner, czy mogę ponownie dołączyć do listingu kolejnego wielokanałka po najechaniu myszą, aby mogli go edytować?

MapShaper.Feature.prototype.poly = function(type) { 
    var color = MapShaper.getColor(false), 
    path = new google.maps.MVCArray, 
    poly, 
    self = this, 
    el = type + "_b"; 

    if(type=="shape"){ 
     poly = self.createShape({strokeWeight: 3, fillColor: color}, path); 
    }else if(type=="line"){ 
     poly = self.createLine({strokeWeight: 3, strokeColor: color }, path); 
    } 

    poly.markers = new google.maps.MVCArray; 

    google.maps.event.addListener(poly, "mouseover", function(){  
     poly.markers.forEach(function(polyMarker, index){ 
      polyMarker.setVisible(true); 
     }); 
    }); 

MapShaper.Feature.prototype.createShape = function(opts, path) { 
    var poly; 
    poly = new google.maps.Polygon({ 
     clickable:false, 
     strokeWeight: opts.strokeWeight, 
     fillColor: opts.fillColor 
    }); 
    poly.setPaths(new google.maps.MVCArray([path])); 
    return poly; 
} 

MapShaper.Feature.prototype.createShape = function(opts, path) { 
    var poly; 
    poly = new google.maps.Polygon({ 
     clickable:false, 
     strokeWeight: opts.strokeWeight, 
     fillColor: opts.fillColor 
    }); 
    poly.setPaths(new google.maps.MVCArray([path])); 
    return poly; 
} 


     google.maps.event.addListener(marker, 'click', function() { 
      if (!marker.index == 0) { 
       marker.setMap(null); 
       markers.removeAt(marker.index); 
       path.removeAt(marker.index); 
       MapShaper.reindex(markers);    
       if(markers.getLength() == 0){ 
        MapShaper.removeFeature(poly.id); 
       } 
      } else { 
       markers.forEach(function(marker, index) { 
        marker.setVisible(false) 
       }); 
       poly.setOptions({clickable: true}); 
      } 
     }); 

Odpowiedz

9

można zrobić prawie to samo ze zmienną globalną, tak jak poniżej: (i ustawić disableListener = true; aby ją wyłączyć)

var disableListener = false; 
google.maps.event.addListener(marker, 'click', function() { 
    if (disableListener) 
     return; 
    if (!marker.index == 0) 
     marker.setMap(null); 
} 
+0

+1 bardzo ładne rozwiązanie –

Powiązane problemy