2016-10-21 144 views
0

我有10'编辑'actionButtons。在每个“编辑”操作按钮上出现三个selectInputs。当我点击selectInputs下面的'Save'按钮后,我想记住选定的值。如果我去第2行 - >点击'编辑' - >选择值 - >点击'保存'并返回到第1行,它不记得以前在第1行选择的值。R闪亮 - 保存选择的值selectInput

所以我想要两个在“保存”按钮即动作:

  • 商店给出的“行”选定值(所以当我再次点击相同的编辑按钮,我会看到先前选择的值)
  • 作出后,我所有selectInputs disapear点击保存按钮

    库(有光泽)

    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

点击“保存” actionButton我想在所有selectInputs更新选定的值后reactivevValues值 - 他们应该显示上次在'保存'之前选择的值。基本上我有许多actionButtons(称为'mainButtonX'),其上显示少量selectInputs和额外的'保存'按钮。当我单击mainButtonX并在selectInputs中选择一些值并单击另一个mainButton并再次返回时,我选择的值为空 - 它不会动态更新或更新保存按钮,因为我希望它的行为如此。 – user3463225

+0

我更新了我的问题和代码。 – user3463225

+0

你想将某些值存储在哪里或简单地隐藏它并显示? – Batanichek

回答

1

您可以通过存储值做成存储onlyfor一个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) 
+0

错误:无法找到函数'复位'的签名'“字符”的继承方法;当我添加shinyjs :: reset()时,当我按'编辑'按钮 – user3463225

+0

尝试更改'shinyjs :: reset'时,什么也没有显示,你有没有库shinyjs? – Batanichek

+0

你有使用Shinyjs(),在用户界面? – Batanichek