我正在尝试向地图添加重命名和删除功能,但是到目前为止,我一直无法定位markers数组中的单个值。我尝试使用markers.indexOf(marker),如下所示:
L.DomEvent.on(deleteBtn, 'click', function(ev) {
var index = markers.indexOf(marker);
console.log(marker.indexOf(index));
console.log('Delete button clicked!');
}, this);
});
执行此操作时,我会在控制台中获得地图上的所有标记。当我使用array.find方法时,我返回false指示该值不存在,但每个标记都是存储在本地存储中的一个对象,目的是能够检索markers数组成员的索引以从本地存储中获取值以根据需要进行更改。
// Creates the custom markers added by the user and stores them to localStorage
var markers = [];
var customLayer = new L.layerGroup();
myMap.on('contextmenu', function(e) {
var marker = L.marker(e.latlng,
{icon : flagIcon}).addTo(customLayer).addTo(myMap);
marker.bindTooltip("<b>Custom</b>", {permanent: true, offset: [0, 0],direction: "bottom"});
customLayer.addTo(myMap);
markers.push({ coords: e.latlng, name: "<b>Custom</b>" });
marker.on('click', function(e) {
renameDeleteChoice(e);
L.DomEvent.on(renameBtn, 'click', function(ev) {
console.log('Rename button clicked!');
}, this);
L.DomEvent.on(deleteBtn, 'click', function(ev) {
// I have been trying code here
console.log('Delete button clicked!');
}, this);
});
// Save marker Coords to localStorage
markers.forEach(function() {
window.localStorage.setItem('customData', JSON.stringify(markers));
});
});
我刚才设置错了吗?我推送新值的数组是否应该具有这种行为? 如果有人需要,这里是传单的文档。我很乐意回答任何问题以求澄清。
https://leafletjs.com/reference-1.3.4.html
预先感谢您提供的任何指导。
答案 0 :(得分:0)
您可以向自定义对象中也引用的标记变量添加唯一的ID,然后根据该标识找到项目。如果latlng
的值是唯一的,则可以执行以下操作:
myMap.on('contextmenu', function(e) {
var marker = ...;
marker.id = e.latlng;
markers.push({ coords: e.latlng, name: "<b>Custom</b>" });
marker.on('click', function(e) {
L.DomEvent.on(deleteBtn, 'click', function(ev) {
var markerId = marker.id;
var markerItem = markers.find(function(m) {
return m.coords === markerId;
});
// update markerItem in some way
// alternatively, use findIndex if you really just want the index
}, this);
});
});