r - 使用shinydashboardplus包(boxDropdownItem)在R Shiny中创建和删除动态框
问题描述
我正在尝试创建一个页面以使用 shinydashboardplus 包中的 boxDropdownItem 动态包含和排除框,但是应用程序崩溃了,有人可以帮我吗?
*也欢迎使用 javascript 的解决方案 :)
这是我的代码:
shinyApp(
ui = dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
uiOutput("boxes")
)
),
server = function(input, output) {
rvs = reactiveValues(boxDropdownItem = list(), observers = list())
output$boxes <- renderUI({
for(i in 1:5) {
rvs$boxDropdownItem[[i]] =
column(width = 12,
box( id = paste("box",i),
title = paste("box",i),
width = 4,
status = NULL,
dropdownMenu = boxDropdown(
icon = icon("ellipsis-v"),
boxDropdownItem(id = paste0("del",i), "Delete")
)
)
)
}
rvs$observers = lapply(1:(length(rvs$boxDropdownItem)),function(i) {
observeEvent(input[[paste0("del",i)]],{
rvs$observers <- rvs$observers[-i]
rvs$boxDropdownItem <- rvs$boxDropdownItem[-i]
})
})
do.call(fluidRow, rvs$boxDropdownItem)
})
}
)
解决方案
您需要首先将框创建为reactiveValues
对象。然后你可以控制你在renderUI
. 我在这里展示了 3 个盒子。您可以将其修改为动态数字。尝试这个
library(shinydashboardPlus)
shinyApp(
ui = shinydashboard::dashboardPage(title = "My Box Dropdown",
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
uiOutput("boxes")
)
),
server = function(input, output) {
rvs = reactiveValues(boxDropdownItem = list(), observers = list(), tmp=list())
observe({
for(i in 1:3) {
rvs$boxDropdownItem[[i]] <-
box(id = paste0("box",i),
title = paste("box",i),
width = 12,
status = "warning",
solidHeader = TRUE,
collapsible = TRUE,
dropdownMenu = boxDropdown(
icon = icon("ellipsis-v"),
boxDropdownItem("Click me", id = paste0("dropdownItem",i), icon = icon("heart")),
dropdownDivider(),
boxDropdownItem(id = paste0("del",i), "Delete")
),
paste("My Box",i)
)
}
})
output$boxes <- renderUI({
if (length(rvs$tmp)>0){
rvs$boxDropdownItem[!(rvs$boxDropdownItem %in% rvs$tmp)]
} else rvs$boxDropdownItem
})
lapply(1:3, function(i) {
observeEvent(input[[paste0("del",i)]],{
rvs$tmp[[i]] <<- rvs$boxDropdownItem[[i]]
}, ignoreInit = TRUE)
observeEvent(input[[paste0("dropdownItem",i)]], {
showNotification("Hello", duration = i, type = "error")
})
})
}
)
下图显示框 2 已删除。
推荐阅读
- r - R: unexpected natural sorting by gtools mixedsort
- javascript - Clearing files from clipboardData - window:paste
- android - 如何显示数据,显示加载屏幕,或报告基于错误的状态
在 Android Studio Compose 官方示例项目中? - autodesk-forge - 无法使用 forge api/app 从 Autodesk Construction Cloud 获取表单数据
- go - 如何使用通道实现功能
- jestjs - 测试开始运行后无法添加挂钩。钩子必须同步定义
- activemq - ActiveMQ 5.15.9 - 当 producerFlowControl 为 false 且未设置 Systemusage 时将存储限制为 100 GB
- git - 如何将存储库克隆到本地机器上?
- python - 为什么 Dask 在读取时显示 FileNotFound 错误?
- c# - 依赖注入模式如何在开始时初始化静态类的变量