我有10个'编辑'动作按钮。在每个“编辑”操作按钮上会出现三个selectInput。点击selectInputs下方的“保存”按钮后,我想记住选定的值。如果我去第2行 - >点击“修改” - >选择值 - >单击“保存”并返回第1行,它不记得先前在第1行中选择的值。
所以我希望在“保存”按钮上有两个动作,即:
单击保存按钮
后,使所有selectInputs消失库(有光泽)
ui <- shinyUI(fluidPage(
titlePanel("Update Select Inputs"),
mainPanel(
tags$head(tags$script(HTML("$(document).on('click', '.needed', function () {
Shiny.onInputChange('last_btn',this.id);
});"))),
column(width = 6,
uiOutput('ValuesAndButtons')),
column(width = 6,uiOutput('Details'))
)
)
)
server <- shinyServer(function(input, output) {
output$ValuesAndButtons <- renderUI({
lapply(
c(1:10),
function(i){
fluidRow(
column(
width = 4,
tags$span(i)
),
column(
width = 3,
tags$button(
type = "button",
id = paste0('ActionButton', i),
class="btn action-button needed",
"Edit"
)
)
)
}
)
})
output$Details <- renderUI ({
req(input$last_btn)
fluidRow(
lapply(
c(1:3),
function(i){
fluidRow(
fluidRow(
column(
width = 5,
tags$span(i)
),
column(
width = 5,
selectInput(
paste0("Details", i),
label = NULL,
choices = c("","a","b","c"),
selected = ""
)
)
)
)
}),
fluidRow(
tags$button(
type = "button",
id = "Save",
class = "btn action-button",
href = "#",
"Save"
)
)
)
})
})
# Run the application
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
您可以将值存储到只存储一个reactivevValues
session
值中来实现
library(shinyjs) # needed for hide and show
ui <- shinyUI(fluidPage(
titlePanel("Update Select Inputs"),
mainPanel(
useShinyjs(),
tags$head(tags$script(HTML("$(document).on('click', '.needed', function () {
Shiny.onInputChange('last_btn',this.id);
});"))),
column(width = 6,
uiOutput('ValuesAndButtons')),
column(width = 6,hidden(wellPanel(id="det",
lapply(1:3,function(i){
fluidRow(
selectInput(
paste0("Details", i),
label = i,
choices = c("","a","b","c"),
selected = ""
)
)
}),
fluidRow(
actionButton("Save","Save")
)
))
))
)
)
server <- shinyServer(function(input, output,session) {
saved_values=reactiveValues(data=NULL)
output$ValuesAndButtons <- renderUI({
lapply(1:10,function(i){
fluidRow(
column(
width = 4,
tags$span(i)
),
column(
width = 3,
actionButton(paste0('ActionButton', i),"Edit",class="needed" )
)
)
}
)
})
observe({
if(!is.null(input$last_btn)){
observeEvent(input[[input$last_btn]],{
shinyjs::show("det")
}
)
}
})
observeEvent(input$last_btn,{
ll<-saved_values[[input$last_btn]]
shinyjs::show("det")
if(!is.null(ll) ){
for(i in 1:length(ll)){
updateSelectInput(session = session,inputId = names(ll)[[i]],selected = ll[[i]])
}
}else{
shinyjs::reset("det")
}
})
observeEvent(input$Save,{
saved_values[[input$last_btn]]=lapply(names(input)[which(substring(names(input),1,7)=="Details")],function(i){
input[[ i]]
})
names(saved_values[[input$last_btn]])=names(input)[which(substring(names(input),1,7)=="Details")]
shinyjs::hide("det")
})
})
# Run the application
shinyApp(ui = ui, server = server)