2017-10-05 3 views
1

ich oneachfeature bin versucht, einen Parameter zu übergeben Sie es auf einem Polygon mit Klick zu binden, ich habe folgendes:Übergeben Sie einen Parameter Faltblatt

var mapLayer = new L.TopoJSON(jsonMap, {style: style, onEachFeature: onEachFeature.bind(null,null,selectionManager), pane:'borders'}).addTo(this.map); 


function onEachFeature(feature, layer, selectionManager) { 
        console.log(selectionManager) 
        layer.on({ 
         mouseover: highlightFeature, 
         mouseout: resetHighlight, 
         click: dataFilter.bind(null,ID) 
        }); 
       } 

function dataFilter(selectionManager,e){ 
        var layer = e.target; 
        var zoneName = layer.feature.properties.Index; 
        console.log(zoneName) 
        console.log(selectionManager); 
       } 

Also hier mein Ziel einen Parameter in dataFilter zu lesen ist (die ist in diesem Fall selectionManager)

Antwort

2

Laut der Broschüre muss eine Funktion sein, die zwei Parameter (feature und layer) empfängt. Verwenden Sie Function.prototype.bind in der Art, wie Sie es verwenden, nicht das, was Sie wollen.

Erstellen Sie stattdessen eine closure:

function onEachFeatureClosure(dataFilter) { 
    return function onEachFeature(feature, layer) { 
     // Your own logic, that uses dataFilter as well as feature and layer 
    } 
} 

L.topoJSON(jsonMap, { 
    style: style, 
    onEachFeature: onEachFeatureClosure(selectionManager), 
    pane:'borders' 
}).addTo(this.map); 

Beachten Sie, dass der Rückgabewert von onEachFeatureClosure(selectionManager) eine Funktion ist, die wie function onEachFeature(feat, layer) {...} aussieht.

Verwandte Themen