2016-10-21 148 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