我有一个应用程序可以打开一个modalDialog
,里面有一个图像。但是,只有在第一次打开模态时,放大才起作用。如何修复这个问题?下面是一个最小的reprex:
library(shiny)
library(spsComps)
ui <- fluidPage(
actionButton("modal", "Open modal")
)
server <- function(input, output, session) {
observeEvent(input$modal,
{
showModal(modalDialog(
title = "test",
fluidRow(gallery(
texts = "Click to enlarge", hrefs = "", image_frame_size = 6,
images = "https://cdn.pixabay.com/photo/2018/07/31/22/08/lion-3576045__340.jpg",
enlarge = TRUE, title = "When you close this modal, the enlargement does not work again",
enlarge_method = "modal"
)),
footer = modalButton("Cerrar"),
easyClose = TRUE,
size = "xl"))
})
}
shinyApp(ui, server)
第一次打开模态时,您可以通过单击它来放大图像。它看起来像这样:
但是,当您***关闭然后重新打开模态***时,该放大功能丢失。
1条答案
按热度按时间g52tjvyc1#
一个临时的解决方案是:
原因是我在图库创建功能中有这个
singleton(...
,不管你有多少图库,只需要创建一个放大img容器(同时放大两张图片是不切实际的)。因此,来自不同图库的放大图像会显示在同一个放大容器中。这样可以节省计算机资源。而Shiny中的singleton
是防止重复的函数,即使你可以多次调用gallery
,如果singleton
中的内容只被发送到DOM树一次,它也不会再次追加。问题是当
showModal
关闭时,Shiny会删除modal中的所有内容,包括图库singleton
内容。同时,我认为singleton
内容验证停留在R级别。它实际上不会搜索DOM树,以确定该内容是否存在。因此,Shiny认为singleton
内容存在。因此在第二次调用showModal
时拒绝将其发送到DOM。上述修复将
singleton
内容附加到fluidPage
容器,而不是Shiny模态容器,因此当模态关闭时,无法删除内容。当你有
singleton
和modalDialog
的时候,这是一个普遍的问题。我没有什么可以做来修复Shiny,但是我可能会在下一个spsComps
版本中想到一个更用户友好的方法来解决它。