2012-04-25 2 views
9

Sto provando a creare un'applicazione mappa utilizzando leaflet.js e non riesco a capire come utilizzare il metodo .off. La documentazione non ha esempi e non riesco a trovare nulla da nessun'altra parte online. Ho distillato il problema in una porzione più semplice di codice, quindi la mia domanda potrebbe essere più chiara.Come si usa il metodo di evento .off() in leaflet.js?

Fondamentalmente l'ho impostato in modo tale che quando si fa clic sul collegamento "attiva clic" aggiungerà un listener di eventi che aggiunge un marcatore alla mappa ogni volta che si fa clic su di esso. Voglio rimuovere quel listener di eventi quando fai clic su "Disattiva clic".

Here is a link to the demo

Ecco il codice che ho adesso.

$(document).ready(function(){ 

var map, cloudmade, sanAntonio, polygonPoints 


map = new L.Map('map'); 
cloudmade = new L.TileLayer('http://{s}.tile.cloudmade.com/d4334cd6077140e3b92ccfae2b363070/997/256/{z}/{x}/{y}.png', { 
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>', 
    maxZoom: 18 
}); 


sanAntonio = new L.LatLng(29.4238889, -98.4933333); // geographical point (longitude and latitude) 


map.setView(sanAntonio, 13).addLayer(cloudmade); 

//everything above sets up the map 



function enableClick(){ 
    map.on('click', function(e) {  
    var marker = new L.Marker(e.latlng, {draggable:true}); 
    map.addLayer(marker); 
    });//closes the click function 

    this.disableClick = function(){ 
    map.off('click'); 
    } 

} 



//when 
$('#enable_click').click(function(){ 
    var enable_click = new enableClick() 

    $('#disable_click').click(function(){ 
    enable_click.disableClick; 
    }); 

}); 




});//closes the document ready function 

Ho già provato un sacco di cose diverse modo che il tutto 'this.disableClick' è solo l'ultima cosa strana che ho provato. Qualcuno ha un indizio?

risposta

17

È necessario passare la funzione di on e off per riferimento:

function doStuff() { ... } 

map.on('click', doStuff); 
... 
map.off('click', doStuff); 
+2

È la funzione ancora necessario quando si utilizza off? – fuzz

+0

Sì. Ciò è probabilmente dovuto al fatto che è possibile associare più gestori (funzioni) a un singolo evento. Vedi http://leafletjs.com/reference.html#events – nothingisnecessary

+0

ciao, ho provato questo, ma senza fortuna, this.map.off ('click', function (evt) { console.log ("fare clic su disabilitato "); }); – AhammadaliPK