【发布时间】:2018-07-25 18:00:02
【问题描述】:
我正在构建一个闪亮的应用程序,其中selectInput 功能将作为传统的 HTML 选择下拉菜单和可点击的图像映射呈现。我当前的策略是将图像映射多边形链接回应用程序并添加 URL 参数,解析该 URL,然后更新选择。这当然每次都会重置应用,还可以但不是很好,而且UI闪烁也不是很优雅。
我的问题是:
- 是否有更好的方法来捕获图像点击并更新输入?
- 如果我继续我的解决方案,我是否可以延迟
selectInput上的呈现,以便在解析 URL 之后才会显示它,以便在闪烁到参数化之前它暂时不显示默认选择选择?
这是一个演示:
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("letter_select",
"Pick a letter:",
choices = c('A' = 1, 'B' = 2, 'C' = 3, 'D' = 4))
),
mainPanel(
h3('Or click a letter'),
img(src = 'testpattern.png', usemap = '#image-map'),
HTML('
<map name="image-map">
<area target="_self" title="A" href="?letter=1" coords=0,0,50,0,50,50,0,50" shape="poly">
<area target="_self" title="B" href="?letter=2" coords=50,0,100,0,100,50,50,50" shape="poly">
<area target="_self" title="C" href="?letter=3" coords=0,50,50,50,50,100,0,100" shape="poly">
<area target="_self" title="D" href="?letter=4" coords=50,50,100,50,100,100,50,100" shape="poly">
</map>
')
)
)
)
server <- function(input, output, session) {
observe({
query <- parseQueryString(session$clientData$url_search)
if (!is.null(query[['letter']])) {
updateSelectInput(session, 'letter_select', selected = query[['letter']])
}
})
}
shinyApp(ui = ui, server = server)
图片位于 `www/testpattern.png',如下所示。
【问题讨论】: