【发布时间】:2016-05-09 05:38:23
【问题描述】:
我很确定这是一个概念错误,但我不确定我在哪里打错了电话。
按照传单教程,我正在尝试在地图上创建一个弹出窗口。根据教程,这是一个简单的操作
var popup = L.popup();
function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("You clicked the map at " + e.latlng.toString())
.openOn(mymap);
}
mymap.on('click', onMapClick);
但是,当我将其翻译成 clojurescript 时,我收到以下错误:
未捕获的类型错误:t.openPopup 不是函数
我 100% 肯定我错误地调用了 javascript。我正在执行以下操作:
(defn onMapClick [e]
(let [popup (js/L.Popup.)]
(-> popup
(.setLatLng (.-latlng e))
(.setContent (str "You clicked the map at " (.-latlng e)))
(.openOn map))))
然后我称之为:
(.on map "click" onMapClick)
map 的定义正确。 (我说得对,因为我能够绘制多边形并创建与.bindPopup 绑定到这些多边形的弹出窗口)
【问题讨论】:
-
你试过没有线程宏吗?线程宏假定每次都返回弹出窗口,而这些互操作调用可能并非如此。
-
@ChrisMurphy 不幸的是,
(.openOn popup (.setContent (.setLatLng popup (.-latlng e) "You clicked the map at " + (.-latlng e))) map)产生了同样的错误。 -
原来我犯了一个超级愚蠢的错误,并且在我定义
map的范围之外调用了它,并且它被打破了。只需将其包裹在(let [map ..define map..] <code here>) -
考虑到 Clojure 没有很好的错误消息并且允许隐藏,这实际上并不是一个可以在任何地方使用的好名字:github.com/bbatsov/clojure-style-guide#dont-shadow-clojure-core
-
@ChrisMurphy 抱歉,这只是为了澄清传单中发生的事情,我已将
(js/L.Map. "the-map")绑定到leaflet-mp。
标签: leaflet clojurescript