如何解决如何在shinyR中创建一个按钮,其事件与传单地图中的多边形绘制工具栏相同
我想在 ShinyR 中创建一个按钮,它的事件与传单地图中的多边形绘制工具栏相同。我想弄清楚如何手动触发从 R 到传单多边形的事件。基本上,我希望如果单击 ShinyR 中的一个按钮,我可以使用传单绘图工具栏以相同的方式开始绘制多边形。
我像这样从 R 向 Javascript 发送指令:
从用户界面方面:
drw <- tags$script(HTML(
"
Shiny.addCustomMessageHandler(
'drw_pol',const onCreate =(e)=> {
var e = document.createEvent('Event');
e.initEvent('click',true,true);
var cb = document.getElementsByClassName('leaflet-draw-draw-polygon');
return !cb[0].dispatchEvent(e);
};
"
))
drw,tags$button(type="button",id = "polygon_button",'handler',style='color:#3399FF ;background-color: Transparent',class="btn action-button shiny-bound-input"),leafletoutput("map")
表单服务器端:
hit <- function(){
onClick={(e)= {onCreate(e)}}
}
observeEvent(input$polygon_button,{
function(x) {
session$sendCustomMessage(
"drw_pol",hit()
)
}
})
不幸的是,我的代码不起作用。我最大的挑战是如何将点击事件从 R 发送到 Shiny。单击事件是通过 R 中的 hit() 函数创建器从 R 发送的。请告诉我我错过了什么?
解决方法
I come up to a simple solution with the package shinyjs:
in UI:
jspolygon <- "shinyjs.polygon_click = function(){
var e = document.createEvent('Event');
e.initEvent('click',true,true);
var cb = document.getElementsByClassName('leaflet-draw-draw-polygon');
return !cb[0].dispatchEvent(e);
}"
useShinyjs(),shinyjs::extendShinyjs(text = jspolygon,functions = c("polygon_click"))
in server:
observeEvent(input$polygon_button,{
js$polygon_click()
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。