选择器输入作为过滤器使用shinyJS禁用所有未禁用按钮
Posted
技术标签:
【中文标题】选择器输入作为过滤器使用shinyJS禁用所有未禁用按钮【英文标题】:pickerinput as filter disable all not disabling button using shinyJS 【发布时间】:2021-08-28 13:38:28 【问题描述】:希望你保持安全。
我已经搜索过类似的问题,但没有成功。
我的代码有 5k 行,所以发布它是不行的。
我会尽量提供尽可能多的信息。
简而言之,我有一些 pickerInputs 用作 rhandsontable 对象的反应式过滤器。
我有一个保存按钮,以便用户保存他们的输入。
我最初的策略有一个致命弱点,即使用过滤进行保存会覆盖 rhandsontable 中的所有数据。
因此,一个快速的解决方法是添加一个observeEvent,其中保存按钮(通过使用ShinyJS)仅在pickerInput 选择了所有选项时才启用。
到目前为止,一切都很好,但我注意到一个奇怪的行为:最初,如果我们在 pickerInput 中单击“取消全选”,则保存按钮被禁用,但通过单击“全选”(启用保存按钮)然后单击“取消全选”那么保存按钮不会被禁用。
下面是我的 observeEvent 代码。
以前有没有人出现过这种行为?
## having buttons disabled by default to account for null/empty statement
shinyjs::disable("save_data_PCD_Metrics")
observeEvent(input$metricsTableEXCELPCDProject,
req(input$metricsTableEXCELPCDProject)
print(length(input$metricsTableEXCELPCDProject))
print(length(sort(unique(as.character(metricsTableEXCEL$Project)))))
print(isTRUE(length(input$metricsTableEXCELPCDProject) == length(sort(unique(as.character(metricsTableEXCEL$Project))))))
print(input$metricsTableEXCELPCDProject)
## having buttons disabled by default to account for null/empty statement
shinyjs::disable("save_data_PCD_Metrics")
## toggle state of the button when condition of all projects selected
if(isTRUE(length(input$metricsTableEXCELPCDProject) == length(sort(unique(as.character(metricsTableEXCEL$Project))))))
shinyjs::enable("save_data_PCD_Metrics")
)
最好的,
R
【问题讨论】:
【参考方案1】:要解决您的问题,您可以在单独的观察者中启用保存按钮,而不是在 observeEvent
中。试试这个
library(shiny)
library(shinyjs)
library(shinyWidgets)
df1 <- data.frame(A=c(1:15),Y=c(16:30))
ui <- fluidPage(
useShinyjs(),
pickerInput("test",choices=list("A"=list(1,2,3,4,5),"B"=list(6,7,8,9,10), "C" = list(11,12,13,14,15)),
options = list(`actions-box` = TRUE
),
multiple=TRUE),
actionButton("savee", "Save"),
textOutput("testOutput")
)
server <- function(input, output)
shinyjs::disable("savee")
observeEvent(input$test,
req(input$test)
print(length(input$test))
#print(length(sort(unique(as.character(metricsTableEXCEL$Project)))))
print(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A))))))
print(input$test)
## having buttons disabled by default to account for null/empty statement
# shinyjs::disable("savee")
## toggle state of the button when condition of all projects selected
## enabling within this observeEvent will not work
# if(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A))))))
# shinyjs::enable("savee")
#
)
saveme <- reactive(
if(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A)))))) saveme = 1 else saveme = 0
)
observe(
if (saveme()) shinyjs::enable("savee") ## this works
else shinyjs::disable("savee")
print(saveme())
)
output$testOutput <- renderText(paste(input$test))
shinyApp(ui = ui, server = server)
【讨论】:
这就像一个魅力......谢谢!显然需要单独的反应和观察,但吸取教训。以上是关于选择器输入作为过滤器使用shinyJS禁用所有未禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章