Я пытаюсь добавить на свою карту функции переименования и удаления, но до сих пор мне не удалось настроить таргетинг на одно значение в массиве маркеров. Я пробовал использовать markers.indexOf (marker), как показано ниже:
L.DomEvent.on(deleteBtn, 'click', function(ev) {
var index = markers.indexOf(marker);
console.info(marker.indexOf(index));
console.info('Delete button clicked!');
}, this);
});
Когда я это делаю, я получаю все маркеры на карте в консоли. Когда я использую метод array.find, я получаю false, указывающее, что значение не существует, но каждый маркер является объектом, хранящимся в локальном хранилище. Цель состоит в том, чтобы иметь возможность получить индекс члена массива маркеров для получить значения из локального хранилища, чтобы изменить их по мере необходимости.
// 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.info('Rename button clicked!');
}, this);
L.DomEvent.on(deleteBtn, 'click', function(ev) {
// I have been trying code here
console.info('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
Заранее благодарим за любые рекомендации, которые вы предоставляете.
Да, в конце концов я понял это. Как мне найти индекс события клика? Спасибо что нашли время ответить.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете добавить уникальный идентификатор к переменной-маркеру, на которую также есть ссылка в настраиваемом объекте, а затем найти элемент на основе этого. Если значение 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);
});
});
Эй, спасибо за ответ. В итоге я использовал index Of, но похоже, что это тоже сработает. Я ценю поддержку.
Фактически вы не добавляете переменную
markerв массивmarkers, вы добавляете в настраиваемый объект{ coords: e.latlng, name: "<b>Custom</b>" }