首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹出式传单中的试剂成分-自定义传单弹出式

弹出式传单中的试剂成分-自定义传单弹出式
EN

Stack Overflow用户
提问于 2018-07-29 14:10:12
回答 1查看 472关注 0票数 1

我正在用重新框架和试剂构建一个Clojurescript前端。目前,前端只包含一张地图,该地图是使用传单创建的。在地图上单击一个新的标记设置为该位置。单击任何这些标记时,都会显示弹出。

到目前一切尚好。现在的问题是,我想准确地调整这个传单弹出,以也包含一个删除按钮,然后应该用来删除标记再次。这里是我遇到麻烦的地方。代码如下所示(归结为最小):

代码语言:javascript
复制
(setup-map!
    (-> js/L
        (.map "mapid")
        (.setView #js [12.34 56.78] 10))]
        (.on map "click" add-marker-to-map! (aget % "latlng" "lat") (aget % 
        "latlng" "lng"))))  

(defn add-marker-to-map!
    [lat long map-object]
    (-> js/L
        (.marker #js [lat long])
        (.addTo map-object)
        (.bindPopup "<div>Hello World!</div>")

这也能解决问题。但是我不想将内联HTML写成字符串。我想用hiccup语法编写弹出的内容,然后以某种方式将其传递给".bindPopup“。我想这样做,因为单击将包含一些Clojurescript,如果我只是将HTML内联为一个字符串,我就不能放在其中。我试过,例如:

(.bindPopup (reagent.dom.server/render-to-string [:div "Hello World"]))

这也很好,但是我输入的任何点击都是在翻译中丢失的。我知道这不是这样的(请参阅onClick handler not registering with ReactDOMServer.renderToStringReact.js Serverside rendering and Event Handlers)。

因此,我希望找到另一种方法将我的Reagent (它只是包装React)组件传递给传单,以便它满足弹出窗口的接口:

setContent(<String|HTMLElement|Function> htmlContent) (https://leafletjs.com/reference-1.3.2.html#popup-setcontent)

因此,基本上,我希望将组件呈现到一个HTMLElement中,而不是直接呈现到虚拟DOM中。我想调用试剂呈现函数,不将结果呈现到应用程序中,但将其作为一个HTMLElement返回,我可以将其传递给传单。

代码语言:javascript
复制
 (reagent/render [hello] (.getElementById js/document "app"))

TLDR:如何将一个Reagent组件呈现到一个HTMLelement中,包括它的on-click函数,这样我就可以将它交给传单弹出?

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 15:25:00

您可以使用自己的DOM容器来呈现元素:

代码语言:javascript
复制
(def custom-parent (atom (dom/createDom "div")))

我想你需要的不仅仅是一个,但为了简洁起见,我需要一个。

代码语言:javascript
复制
(defn add-marker-to-map!
    [evt]
    (let [evt (js->clj evt :keywordize-keys true)
          {{:keys [lat lng]} :latlng} evt]
        (-> js/L
            (.marker #js [lat lng])
            (.addTo m)
            (.bindPopup (r/render [:div "Marker here"
                                   [:br]
                                   [:button {:on-click (fn [] (js/console.log "clicked"))} "delete me"]]
                                  @custom-parent)))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51581159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档