Как я могу нацелить индекс в этом массиве? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь добавить функциональность переименования и удаления к моей карте, но до сих пор я не смог указать одно значение в массиве маркеров.Я попытался использовать 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

Заранее благодарим за любые предоставленные вами рекомендации.

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете добавить уникальный идентификатор в переменную маркера, на которую также ссылается пользовательский объект, а затем найти элемент на основе этого.Если значение 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);
    });
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...