Брошюра JS: Как передать (Geo-)json ID в событие клика?

Мое веб-приложение django должно делать следующее: передавать объект Geojson в представление, отображать точки с помощью листовки и отображать некоторую дополнительную информацию, когда пользователь нажимает на маркер точки. Я не так хорошо знаком с js, поэтому я застрял, привязывая правильные данные к событию click. Вот пример объекта geojson. Как я могу получить доступ к 'id' с моим событием click?

var geojsonFeature = {'geometry':
                          {'type': 'MultiPoint', 
                          'coordinates': [[4.939, 52.33], [4.9409, 52.33]]
                          }, 
                     'type': 'Feature', 
                     'properties': 
                        {'id': '52','popupContent': 'id=52'}
                     };

Добавление объекта geojson на карту..

var gj = L.geoJson(geojsonFeature, {
    pointToLayer: function (feature, latlng) {
    return L.circleMarker(latlng, geojsonMarkerOptions);
    }}).addTo(map);

И on()-щелчок....

gj.on('click', function(evt) {
   alert(id) // well, this is where I need help
});

ПРИМЕЧАНИЕ. Я не хочу использовать что-то вроде bindPopup(feature.properties.popupContent), потому что я хочу открыть новое окно, которое вызывает другое представление django с некоторыми дополнительными данными из базы данных.


person LarsVegas    schedule 29.03.2013    source источник


Ответы (2)


Для всех с похожей проблемой: вы хотите использовать функцию onEachFeature. Функция представляет собой объект geojson. Используя приведенные выше примеры данных, доступ к идентификатору можно получить через feature.properties.popupContent.

function onEachFeature(feature, layer) {
    layer.on('click', function (e) {
        alert(feature.properties.popupContent);
        //or
        alert(feature.properties.id);
    });
}
person LarsVegas    schedule 30.03.2013
comment
люблю тебя, приятель, после поисков одной ночи я получил этот ответ. - person Hassan Tahir; 14.11.2016

После безуспешной попытки решения, опубликованного выше, я заставил эту версию работать:

function onEachFeature(feature, layer) {
    layer.on('click', function (e) {
        alert(e.target.feature.properties.popupContent);
        //or
        alert(e.target.feature.properties.id);
    });
}
person DHCurrie    schedule 07.01.2015