r - 如果输入通过,updateTabItems 在模块中不起作用
问题描述
我想创建一个函数/一个模块来更新标签集项目。
我知道这个和这个问题,但我的问题与如何处理按钮输入有关updateTabItems
。
在这里你可以找到一个例子:
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
mod_updateTabset <- function(
input, output, session, triggerId, dashboardId, tab, parent
) {
observeEvent(triggerId, {
updateTabItems(parent, dashboardId, selected = tab)
})
}
ui <- dashboardPagePlus(
header = dashboardHeaderPlus(),
sidebar = dashboardSidebar(
sidebarMenu(
id = 'Tabs',
menuItem("Tab 01", tabName = "tab01", icon = icon("dice-one")),
menuItem("Tab 02", tabName = "tab02", icon = icon("dice-two"))
)
),
body = dashboardBody(
tabItems(
tabItem(
tabName = "tab01",
actionButton("updateButton", label = "To Tab02")
),
tabItem(
tabName = "tab02",
h4("New Tab")
)
)
)
)
server <- function(input, output, session) {
callModule(
mod_updateTabset,
"updateLink",
triggerId = input$updateButton,
dashboardId = "Tabs",
tab = "tab02",
parent = session
)
}
shinyApp(ui = ui, server = server)
我知道它在创建时工作mod_updateTabset_UI
,将 actionButton 转移到模块。这就是为什么我认为问题在于按钮处理的原因。
不过,我希望有一个功能/模块可以处理所有类型的链接、按钮等来更新选项卡项目,而不仅仅是一个按钮
解决方案
对于遇到相同问题的任何人:调用模块时需要使用reactive()
fortriggerId
callModule(
mod_updateTabset,
"updateLink",
triggerId = reactive(input$updateButton),
dashboardId = "Tabs",
tab = "tab02",
parent = session
)
然后模块需要处理一个反应值:
mod_updateTabset <- function(
input, output, session, triggerId, dashboardId, tab, parent
) {
observeEvent(triggerId(), {
updateTabItems(parent, dashboardId, selected = tab)
})
}
推荐阅读
- devops - 您如何跟踪部署 ID 和构建
- python - 如何将日期时间转换为秒
- php - Drupal 8 - 将视图结果转换为 2 列
- bash - Bash - 从 .csv 文件中删除空列
- google-cloud-platform - 使用 Google Cloud 被动地摄取批处理数据(客户端推送)的好方法是什么?
- python - 在列中填充值
- flutter - 使用 ViewModelProvider 时如何从 TextField 获取文本值?
- javascript - 在 Node.JS 中导入 HTML 文件并将变量传递给它
- spring-integration - Spring Integration:聚合器在超时时过期消息
- python - 如何使用 pip 1.4.1 信任主机