我正在尝试为
shinydashboard
menuItem
实现反应式文本,而无需在 renderMenu
中使用 server
。原因是每次渲染菜单时,都会将菜单中的所有项目重置为默认值。然而,其中一些也是反应性的,例如actionbutton
在发生事件时被禁用。
我怀疑这对于
runjs
来说是可能的,但我不知道如何正确处理特定 id 的菜单项的文本。我无法使用 isolate
来处理我不想在 renderMenu
中做出反应的事情;当我尝试这样做时,我遇到了错误。
下面的示例是不需要的,因为每次渲染菜单时,它都会重置所有内容,无论项目随后如何更改。在此示例中,按钮和复选框将重置为
enabled
状态,尽管在单击按钮时禁用它们。相比之下,为了说明我的意思,菜单 1 中的按钮和复选框保持禁用状态。
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
menuItem(
"Menu1",
actionButton("dummy1", "Dummy Button 1"),
checkboxInput('dummy3', 'Dummy 3')
),
menuItemOutput('menu2')
)
),
dashboardBody(
shinyjs::useShinyjs(),
textInput("name", label='New Menu Label', value = ""),
actionButton("update", "Update Label")
)
)
server <- function(input, output, session){
menulabel<-reactiveVal('Menu2')
output$menu2<-renderMenu({
menuItem(
menulabel(),
actionButton('dummy2', 'Dummy Button 2'),
checkboxInput('dummy4', 'Dummy 4')
)
})
observeEvent(input$update,{
menulabel(input$name) #instead of a reactive label and renderMenu(), use runjs() here?
shinyjs::disable('dummy1')
shinyjs::disable('dummy2')
shinyjs::disable('dummy3')
shinyjs::disable('dummy4')
})
}
shinyApp(ui, server)