У меня есть MapBox JS с внедрением тысяч функций, загружаемых через Geo Json. Одно из требований - разрешить пользователям выбирать маркер и иметь возможность обновлять некоторые данные на нем. Я делаю это, обрабатывая обработчик 'click' и показывая окно, позволяющее вводить некоторые новые данные, и кнопку обновления, которая вызывает сервер и возвращает ответ. Простой сценарий.
Однако при изменении значения свойства в обратном вызове новые данные не отображаются при следующем щелчке. У меня есть следующий Пример , чтобы показать упрощенную версию моего процесса. обновление происходит в строке # 160.
// When a click event occurs on a feature open a popup at the
// location of the feature, which allows upadting
map.on('click', 'places', function(e) {
var coordinates = e.features[0].geometry.coordinates.slice();
var description = e.features[0].properties.description;
// Ensure that if the map is zoomed out such that multiple
// copies of the feature are visible, the popup appears
// over the copy being pointed to.
while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {
coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;
}
new mapboxgl.Popup()
.setLngLat(coordinates)
.setHTML(description)
.addTo(map);
// change the description value. this is only a POC.
// real applications will update data on a server and only then update the description.
// is this a copy or a reference to the feature?!?
e.features[0].properties.description = "my new description"; // update happens here - #160
});
Я предполагал, что функции, возвращаемые обработчиком 'click' в e.features , являются ссылками на исходные функции и таким образом, его можно легко изменить, но, похоже, это не так. единственная альтернатива, которую я вижу для этого, - это запрос функций из источника, поиск исходного объекта функции, его обновление и сброс данных в источнике, но это кажется слишком большими накладными расходами.
Какой здесь подход правильный?