打开用于点击按钮时在地图

问题描述:

外我有一个小叶地图具有多个层中选择的一个层jQuery用户界面对话框。我可以绘制多段线,删除并编辑它们的特定图层,然后使用jQuery UI对话框发送一些信息到我的postGis数据库。打开用于点击按钮时在地图

绘图没有问题,删除我的折线。 我点击地图外的按钮,可以继续绘制选定的图层或删除图层中的多义线。

但现在,我怎么可以点击超出了我的地图按钮,打开相对于我编辑图层对话框?

我试过在我的图层的“oneachfeature”上调用我的保存按钮,所以当我选择一个图层并单击我的保存按钮时,它首先打开相对于所选图层的对话框,但之后,它也打开我的其他图层的对话框。

这里是一些代码来解释我在做什么:

//I'm calling my first WFS layer 
 

 
var ajaxlayer1 = $.ajax({ 
 
     url : owsrootUrlAssainissement + L.Util.getParamString(parameterslayer1), 
 
     dataType : 'jsonp', 
 
     jsonpCallback: 'calllayer1' 
 
     }); 
 

 
    ajaxlayer1.done(layer1); 
 

 
    function layer1 (reseaulayer1) { 
 
     conduites_layer1 = new L.geoJson(reseaulayer1, { 
 
       onEachFeature: eachfeaturelayer1 
 
       }); 
 
     return layer1; 
 
     } 
 

 
    function eachfeaturelayer1 (feature, layer) { 
 

 
     layer.on('click', function(e){ 
 
         if(selectedFeature) 
 
          selectedFeature.disableEdit(); 
 
          map.closePopup(); 
 
          selectedFeature = e.target; 
 
          e.target.enableEdit(); 
 
         }); 
 

 
     layer.on('editable:enable',function (e) { 
 
      //do some stuff here 
 
     }); 
 

 
     $('#saveBtn').on('click',function(e){ 
 
          layer.disableEdit(); 
 
          //open a jquery ui dialog box with informations from my second layer 
 
          //var dialog1 = ... dialog_layer1.dialog("open"); 
 
         }); 
 

 
     layer.on('editable:disable',function (e) { 
 
      // Some code to recover layer's coordinates, ... 
 
     }); 
 
    } 
 

 

 
//I'm calling my second WFS layer 
 

 
var ajaxlayer2 = $.ajax({ 
 
     url : owsrootUrlAssainissement + L.Util.getParamString(parameterslayer2), 
 
     dataType : 'jsonp', 
 
     jsonpCallback: 'calllayer2' 
 
     }); 
 

 
    ajaxlayer2.done(layer2); 
 

 
    function layer2 (reseaulayer2) { 
 
     conduites_layer2 = new L.geoJson(reseaulayer2, { 
 
       onEachFeature: eachfeaturelayer2 
 
       }); 
 
     return layer2; 
 
     } 
 

 
    function eachfeaturelayer2 (feature, layer) { 
 

 
     layer.on('click', function(e){ 
 
         if(selectedFeature) 
 
          selectedFeature.disableEdit(); 
 
          map.closePopup(); 
 
          selectedFeature = e.target; 
 
          e.target.enableEdit(); 
 
         }); 
 

 
     layer.on('editable:enable',function (e) { 
 
      //do some stuff here 
 
     }); 
 

 
     $('#saveBtn').on('click',function(e){ 
 
          layer.disableEdit(); 
 
          //open a jquery ui dialog box with informations from my second layer 
 
          //var dialog2 = ... dialog_layer2.dialog("open"); 
 
         }); 
 

 
     layer.on('editable:disable',function (e) { 
 
      // Some code to recover layer's coordinates, ... 
 
     }); 
 
    }

+0

这是没有看到HTML或层和按钮之间的关系太混乱。按钮如何知道正在编辑的图层? – Twisty

我建议这样的事情,在该对话框中定义和需要保存操作时,后调整。

工作实施例:https://jsfiddle.net/Twisty/f1gvo1h6/

HTML

<div> 
    <div class="artwork"> 
    </div> 
    <button id="saveBtn"> 
    Save 
    </button> 
</div> 

<div id="saveDialog" title="Save Layer"> 
    <p><span class="ui-icon ui-icon-alert" style="float:left; margin:12px 12px 20px 0;"></span>Do you wish to save the changes to this layer?</p> 
</div> 

的jQuery

$(function() { 

    $("#saveDialog").dialog({ 
    autoOpen: false, 
    resizable: false, 
    height: "auto", 
    width: 400, 
    modal: true 
    }); 
    $("#saveBtn").click(function() { 
    // Gather the layer that is being edited 
    // Create actions and buttons 
    $("#saveDialog").dialog("option", "buttons", [{ 
     text: "Save", 
     click: function() { 
     // Do stuff for the layer save 
     // layer.disableEdit(); 
     $(this).dialog("close"); 
     } 
    }, { 
     text: "Cancel", 
     click: function() { 
     $(this).dialog("close"); 
     } 
    }]); 
    // Open Save Dialog 
    $("#saveDialog").dialog("open"); 
    }); 
}); 

一些,这是从Modal Confirmation Example。基本上,我们知道在任何层上,保存按钮都可能被调用。我们不需要为每个对话创建一个独特的对话框。我们可以创建一个,然后根据需要修改按钮。