gpt4 book ai didi

javascript - 尝试在 Mapbox/Leaflet 中启用标记拖动时,无法读取 null 的属性 '_leaflet_mousedown5'

转载 作者:行者123 更新时间:2023-11-28 07:15:21 30 4
gpt4 key购买 nike

我正在构建允许在 CMS 内编辑 map 框标记的功能。单击 map 标记时,该功能应打开并填充表单,然后允许拖动 map 标记。保存表单后,通过 ajax 提交内容,然后使用 featureLayer.loadURL("my_geojson_endpoint") 重新加载 map 。

我在下面的代码中添加了注释,以概述我是如何遇到错误的。

注意我在 geojson 中定义了一个属性 db_id 来标识每个点,因为当您应用过滤器时,_leaflet_id 会发生变化。我的代码中还包含了 jquery。

代码:

// loop through each marker, adding a click handler
$.each(points._layers, function (item) {
var point = points._layers[item];
attachClickHandler(point);
});

function attachClickHandler(point) {
// open the edit state for the marker on click
$(point._icon).on("click", function () {
openEditState(point);
})
}

function openEditState (point) {
disableEditOthers(point);
displayContent(point);
point.dragging.enable(); // this line causes the error
$(point._icon).off("click");
}
function disableEditOthers (point) {
// hide the other markers from the map (using db_id as mentioned above)
points.setFilter(function (f) {
return f.db_id === point.feature.db_id;
})
// this functions as a callback to display the popup
// since applying the filter on click, does not show the popup
setTimeout(function () {
for (key in points._layers) {
points._layers[key].openPopup();
}
}, 0)
}

在 map 创建步骤中,我已经能够在每个标记上调用这个 Dragging.enable() 方法,并为所有标记提供“可拖动性”,但是从可用性的 Angular 来看,这是不可取的。我希望用户清除编辑状态的换入和换出。

我发现this github上的问题,通过this的解决方案解决。然而,将我的 mapbox.js 版本换成独立版本并包含最新版本的 leaflet (0.7.3) 后,仍然出现相同的错误。

我是否在对象的错误属性上调用了该函数?转储错误行之前的“point”变量并不表明可拖动属性已定义enable()函数。

非常感谢任何帮助。

最佳答案

好吧,作为一个轻微的解决方法,但仍然没有解决原始错误。

$.each(points._layers, function (item) {
points._layers[item].dragging.enable()
})

因为我已经过滤掉了其他点,所以启用拖动所有点可以解决该问题。

如果您可以为我的原始修复提供修复(避免循环),我很乐意接受。

关于javascript - 尝试在 Mapbox/Leaflet 中启用标记拖动时,无法读取 null 的属性 '_leaflet_mousedown5',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30890719/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com