背景:
在mapbox-gl-js
中,虽然您可以从地图中删除图层和要素(因为已存储参考),但您不能对标记执行相同操作。相反,必须存储对任何添加的标记的引用,否则以后将无法删除它们。
var marker = new mapboxgl.Marker().addTo(map);
marker.remove();
设置:
我有一个原子,我在其中添加了我创建的每个标记,以便以后清理它们。
(defonce markers (r/atom []))
(defn add-marker [map img coordinate]
(let [marker (create-marker img)]
(.setLngLat marker (clj->js coordinate))
(.addTo marker map)
(swap! markers conj marker)))
(defn clear-markers []
(doseq [m (array-seq markers)] (.remove m))
(reset! markers []))
但是,如果我打电话clear-markers
,什么也不会发生。没有错误,没有警告,标记只是留在地图中。
如果我在添加后立即删除标记(只是为了尝试一下),它会按照文档中的描述工作:
(defn test-marker [map img coordinate]
(let [marker (create-marker img)]
(.setLngLat marker (clj->js coordinate))
(.addTo marker map)
(.remove marker)))
显然,使用此代码,标记将在添加后立即被删除,因此永远不会出现在地图上,这不是所需的行为,只是一个测试。
我还尝试了其他方法来调用.remove
向量的元素,以下是我的第一次尝试:
(defn clear-markers []
(map #(.remove %) markers))
我对 Clojure(Script) 很陌生,所以我试着理解我的错误在哪里。
- 我的向量中的对象可能不是同一个实例,所以删除它不会影响地图上的标记吗?
- 或者在尝试对向量中的对象执行副作用方法时,我是否必须采取不同的方法?
- 还是我完全错过了其他东西?