如何在shinyR中创建一个按钮,其事件与传单地图中的多边形绘图工具栏相同
How to create a button in shinyR which event is the same as the polygon drawing toolbar in leaflet map
我想在 shinyR 中创建一个按钮,其事件与传单地图中的多边形绘图工具栏相同。我想弄清楚如何手动触发从 R 到 Leaflet 多边形的事件。基本上,我想如果单击 shinyR 中的一个按钮,我可以开始绘制一个多边形,如果我用传单绘图工具栏这样做的话。
我像这样从 R 向 Javascript 发送指令:
来自UI方:
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()
})
我想在 shinyR 中创建一个按钮,其事件与传单地图中的多边形绘图工具栏相同。我想弄清楚如何手动触发从 R 到 Leaflet 多边形的事件。基本上,我想如果单击 shinyR 中的一个按钮,我可以开始绘制一个多边形,如果我用传单绘图工具栏这样做的话。
我像这样从 R 向 Javascript 发送指令:
来自UI方:
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()
})