2016-11-02 10 views
3

サーバ側で生成されたshinyinputの状態を保存する良い方法はありますか?入力の光沢を保存

ui=shinyUI(fluidPage(
    selectInput("select","",choices = c(1,2),multiple = T), 
    uiOutput("din_ui") 
)) 

server=function(input, output,session) { 
    output$din_ui=renderUI({ 
    lapply(input$select,function(i){ 
     numericInput(inputId = paste0("num_",i),i,"") 
    }) 
    }) 

} 

shinyApp(ui,server) 

iがselect 1を選択した場合の値を開始するnum_1リセットよりselect 2を加えるよりnum_1にいくつかの値を挿入します。

答えて

3

numericInput値を読み取り、controlの値をcontrol initに設定できます。

library(shiny) 

ui=shinyUI(fluidPage(
    selectInput("select","",choices = c(1,2),multiple = T), 
    uiOutput("din_ui") 
)) 

server=function(input, output,session) { 
    output$din_ui=renderUI({ 

    input$select 

    isolate(
     lapply(X = input$select, 
      FUN = function(i){ 
       cn <- paste0("num_",i) 
       numericInput(inputId = cn, 
          label = i, 
          value = ifelse(!is.null(input[[cn]]), input[[cn]], '')) 
      } 
    ) 
    ) 
    }) 

} 

shinyApp(ui,server) 
+0

グッドバリアントを見つけ、私も(これは良く知らない)他の方法を見つける(それはハード私が理解するために:コードを参照してください。時には隔離物の...) – Batanichek

0

またinsertUIを使用して、他の方法(光沢のあるバージョン> = 14)

ui=shinyUI(fluidPage(
    selectInput("select","",choices = c(1,2),multiple = T), 
    div(id="din_2") 
)) 

server=function(input, output,session) { 
    sel_dat=reactiveValues(sel=NULL) 

    observeEvent(input$select,{ 
    to_add=input$select[!input$select%in%sel_dat$sel] 
    for (i in to_add){ 
      insertUI(
      selector = '#din_2', 
      where = "beforeEnd", 
      ui =numericInput(inputId = paste0("num_",i),i,"") 
     ) 
    } 
    to_remove=sel_dat$sel[which(!sel_dat$sel %in% input$select)] 
    if(length(to_remove)>0){ 
     removeUI(selector = paste0('div:has(>#num_',to_remove,")")) 
    } 
    sel_dat$sel=input$select 
    },ignoreNULL = FALSE) 

} 
関連する問題