2015-03-02 4 views
5

Mit leaflet.js verwenden Sie leaflet.draw.js, nachdem Sie mit dem Zeichenwerkzeug eine der Formen auf einer benutzerdefinierten Karte gezeichnet haben. Ich habe ein Formular, das sagt, Speichern oder Abbrechen. Wenn der Benutzer Abbrechen drückt, möchte ich, dass die Zeichnung gelöscht wird. Zum Beispiel habe ich ein Rechteck gezeichnet.Wie kann ich die Zeichenebene in leaflet.draw entfernen?

Hier ist meine Stromquelle

map.on('draw:created', function(e) { 
    var layer = e.layer; 
    var type = e.layerType; 

    $("#add-drawing").fadeIn(500); 

    featureGroup.addLayer(e.layer); // Adds rectangle 

    $("a.cancelD").on("click", function() { 
     $("#add-drawing").fadeOut(500); 

     // THESE ARE THE METHODS I HAVE TRIED TO REMOVE THE RECTANGLE 
     map.removeLayer(layer); 
     featureGroup.removeLayer(layer); 
     map.removeLayer(e); 
     featureGroup.removeLayer(e); 
    });  
}); 

Nichts davon scheint zu funktionieren. Ich kann die Toolbox verwenden, um die Ebene zu entfernen, aber dann werden mir keine Informationen in dem Formular übermittelt, das ich einreichen möchte.

Wie kann ich Objekte, die ich gezeichnet habe, entfernen, wenn ich die Abbrechen-Schaltfläche in einem Formular drücke?

Antwort

6

Da Sie zu featureGroup hinzufügen, die Sie sagen, funktioniert, sollten Sie auch von featureGroup entfernen. Der Aufruf von featureGroup.removeLayer(e.layer) oder featureGroup.removeLayer(layer) (weil layer einen Verweis auf e.layer enthält) sollte funktionieren.

Hier ist ein funktionierendes Beispiel auf Plunker: http://plnkr.co/edit/kPvYbH?p=preview

Meiner Meinung nach kann nur zu dem Schluss, dass Ihre Veranstaltung nicht feuert, oder du bist mit irgendeiner Art von seltsamem Scoping Problem aber die leicht getestet werden kann:

$("a.cancelD").on("click", function() { 
    console.log('Click fired!'); // Seeing this in your console, event works 
    console.log(featureGroup); // Should return featureGroup instance, scope ok 
    console.log(e.layer); // Should return polygon instance, scope ok 

    // If all of the above works, this should too 
    featureGroup.removeLayer(e.layer); 
});  
+1

Massiver Daumen nach oben helfen .. Das Problem der Klasse war, habe ich einfach eine ID auf die Schaltfläche Abbrechen und es hat funktioniert .. Ihr anschauliches Beispiel ist das, was mir half es herauszufinden, und die Tatsache, Du hast mich daran erinnert zu prüfen, ob etwas in der Konsole ist, was nicht der Fall war. Vielen Dank! Live-Beispiele sind die Besten! Vielleicht möchten Sie Ihre Antwort bearbeiten, um die ID statt der Klasse einzubeziehen :) –

0

Ich hatte das gleiche Problem. Für mich folgende Lösung funktioniert,

featureGroup.clearLayers (e.layer);

Hope this jemand