提问人:JohnBones JohnBones 提问时间:12/27/2022 更新时间:1/2/2023 访问量:360
In Shiny 使用模块时单击事件不起作用
In Shiny click event is not working when using modules
问:
为什么当我使用模块时,我的 highchart 树状图中的可点击功能不起作用。
我在没有模块的情况下尝试过并且运行良好。
可能是与命名空间有关的东西,对吧,但我找不到它是什么。
有什么帮助吗?
这是我的代码:
library(shiny)
library(highcharter)
library(gapminder)
library(shinyjs)
source(file = 'module_ex_2.R')
ui <- fluidPage(
mod_ex2_UI('ex1')
)
server <- function(input, output){
mod_ex2_Server('ex1')
}
shinyApp(ui, server)
我的模块文件:
mod_ex2_UI <- function(id) {
ns <- NS(id)
tagList(
highchartOutput(ns("hcontainer")),
htmlOutput(ns("clicked"))
)
}
mod_ex2_Server <- function(id) {
moduleServer(
id,
function(input, output, session) {
click_js <- JS("function(event) {Shiny.onInputChange('treemapclick', event.point.name);}")
output$hcontainer <- renderHighchart({
gapminder::gapminder %>%
dplyr::filter(year == 2007) %>%
highcharter::data_to_hierarchical(group_vars = c(continent, country), size_var = pop) %>%
hchart(type = "treemap") %>%
hc_plotOptions(treemap = list(events = list(click = click_js)))
})
output$clicked <- renderUI({
if(is.null(input$treemapclick)){
reactable::reactable(data =gapminder::gapminder %>%
dplyr::filter(year == 2007) %>%
dplyr::filter(country == 'China'))
}else{
reactable::reactable(data =gapminder::gapminder %>%
dplyr::filter(year == 2007) %>%
dplyr::filter(country == input$treemapclick))
}
})
}
)
}
谢谢,任何帮助都会很棒。
答:
2赞
thothal
1/2/2023
#1
您需要将命名空间附加到自定义事件中,如下所示:
click_js <- JS(
glue::glue("function(event) {{
Shiny.setInputValue('{NS(id)('treemapclick')}',
event.point.name);
}}"
)
)
N.B. 是较旧的名称,后者更冗长(参见这篇 Shiny 文章onInputChange
setInputValue
)
评论