r - R Shiny 数据表图像在浏览器中运行时未更新
问题描述
我正在创建一个闪亮的应用程序,它在数据表中显示图像和文本。该表将需要根据用户的输入进行更新。当我在窗口中运行应用程序时,表格会按预期更新。但是,当我在浏览器中运行它时,文本会更新,但图像不会。如何让它在浏览器中工作?
编辑:为清楚起见,下面的示例只是为了重现该问题。真正的应用程序可以显示任意数量的不同图片,这些图片在用户做出选择之前不会保存在本地(它们是从数据库中提取的)。我希望避免使用不同的文件名,因为我最终可能会在本地保存数十万张图片,但如果这是唯一的解决方案,那么我将不得不定期清理文件夹
可重现的示例(需要 2 个本地图像)
library(shiny)
library(imager)
library(DT)
# Define UI
ui <- fluidPage(
# Application title
titlePanel("Tables to export"),
sidebarLayout(
sidebarPanel(
actionButton("pic1","Pic1"),
actionButton("pic2","Pic2")
),
# Show tables
mainPanel(
fluidRow(
dataTableOutput('tab1')
)
)
)
)
# Define server logic
server <- function(input, output) {
observeEvent(input$pic1, {
pic <- load.image("www/pic1.png")
save.image(pic,"www/picToShow.png")
tab1 <- datatable(t(data.frame("Pic"='<img src="picToShow.png" width=150 height=100>',x1=1,x2=2,x3=3,row.names="p1")),
escape = F, options = list(dom = 't',pageLength = 20))
output$tab1 <- renderDataTable(tab1)
})
observeEvent(input$pic2, {
pic <- load.image("www/pic2.png")
save.image(pic,"www/picToShow.png")
tab1 <- datatable(t(data.frame("Pic"='<img src="picToShow.png" width=150 height=100>',x1=4,x2=5,x3=6,row.names="p1")),
escape = F, options = list(dom = 't',pageLength = 20))
output$tab1 <- renderDataTable(tab1)
})
}
# Run the application
shinyApp(ui = ui, server = server)
预期行为(窗口中的行为)
浏览器中的行为
解决方案
我同意@MrFlick 的评论。为什么要加载两个图像并使用相同的名称重新保存它们?浏览器会认为它已经知道图像并将重新使用已经加载的图像。
为什么不直接包含pic1.png
和pic2.png
?
server <- function(input, output) {
observeEvent(input$pic1, {
tab1 <- datatable(t(data.frame("Pic"='<img src="pic1.png" width=150 height=100>',x1=1,x2=2,x3=3,row.names="p1")),
escape = F, options = list(dom = 't',pageLength = 20))
output$tab1 <- renderDataTable(tab1)
})
observeEvent(input$pic2, {
tab1 <- datatable(t(data.frame("Pic"='<img src="pic2.png" width=150 height=100>',x1=4,x2=5,x3=6,row.names="p1")),
escape = F, options = list(dom = 't',pageLength = 20))
output$tab1 <- renderDataTable(tab1)
})
}
推荐阅读
- javascript - 量角器/黄瓜/硒运行测试失败,因为它找不到页面上存在的元素
- ios - 在不知道其索引的情况下选择 UITabBarController 中的特定 viewController
- node.js - 来自 ArrayBuffer 的缓冲区和内存副本
- swift - 枚举关联值令人困惑
- r - dcast 不将变量类型保留为字符,当变量为 NA 时 vapply 出错
- dynamics-crm - FetchXML 理解不同
- javascript - 如何让数据表标题随列宽调整?
- transactions - 了解服务器端 JavaScript-Marklogic 中的事务边界
- ruby - ruby 中的嵌套多行注释?
- java - 有没有办法将这两个 if 语句结合起来?