在单张鼠标点击加载数据和编辑功能特性(Leaflet load data and edit feat

2019-10-18 08:52发布

我从一个GeoJSON的文件加载地图数据和附加为每polygone click事件。 上点击,脚本应该从服务器获取数据并修改点击多边形的属性之一。 即:

function onClick(e) {
    var status = e.target.feature.properties.ACCESS;
    $.ajax({
        url: "http://127.0.0.1:8080/?&u=x&p="+e.target.feature.properties.ID_PARCELL,
        dataType: 'jsonp',
        type: 'GET',
        success: function(data) {
        status = data.status;
        e.target.feature.properties.ACCESS = data.status;
        e.target.bindPopup("Owner: <b>"+ data.status +"</b>").openPopup();
        },
        error: function(data){console.log(data)}
    });
    e.target.feature.properties.ACCESS = status;
    map.fitBounds(e.target.getBounds());
}

但是,由于成功函数是一个回调(同步与否,其实并不重要),我无法找回原来的事件源(即e ),所以我可以修改它的属性之一。

我的问题是:我怎样才能回到事件源加载此数据后? 有没有通用的Javascript方式? 如果没有,有没有什么办法可以查询功能ID的GeoJSON的层? (=>我可以发送,因此在AJAX调用的特征ID,以及简单地取回与响应)

Answer 1:

解决的办法是所希望的变量发送e使用上下文条目匿名功能:

function onClick(e) {
    var status = e.target.feature.properties.ACCESS;
    $.ajax({
        url: "http://127.0.0.1:8080/?&u=x&p="+e.target.feature.properties.ID_PARCELL,
        dataType: 'jsonp',
        context: e,
        type: 'GET',
        success: function(data) {
        status = data.status;
        e.target.feature.properties.ACCESS = data.status;
        e.target.bindPopup("Owner: <b>"+ data.status +"</b>").openPopup();
        },
        error: function(data){console.log(data)}
    });
    e.target.feature.properties.ACCESS = status;
    map.fitBounds(e.target.getBounds());
}


Answer 2:

找你使用的点击和成功的功能相同的事件名称“E”。 尝试改变他们中的一个。 即

function onClick(e) {
     var status = e.target.feature.properties.ACCESS;
     $.ajax({
         url: "http://127.0.0.1:8080/?&u=x&p="+e.target.feature.properties.ID_PARCELL,
         dataType: 'jsonp',
         type: 'GET',
         success: function(data, evt) {
             status = data.status;
             e.target.feature.properties.ACCESS = data.status;
             e.target.bindPopup("Owner: <b>"+ data.status +"</b>").openPopup();
        },
        error: function(data){console.log(data)}
     });
     e.target.feature.properties.ACCESS = status;
     map.fitBounds(e.target.getBounds());
 }

现在返回结果时,你可以更改初始事件“e”的性质。
希望这可以帮助。



文章来源: Leaflet load data and edit feature properties on mouse click