2016-10-15 51 views
0

使用操作按鈕,我想將一些預設值加載到我閃亮的應用程序的UI元素中,然後從更新的UI中觸發輸出。在下面的應用程序中有兩個按鈕。 Print將在輸出$ txt中輸出任何內容。 preset按鈕應使用預設值更新UI元素,然後將此值輸出到輸出。所需的功能相當於按preset,然後按printShiny UI元素的反應性順序

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     textInput('txt','Text',value = ''), 
     actionButton('print','Print'), 
     actionButton('preset','preset') 
    ), 
    mainPanel(
     verbatimTextOutput("outText") 
    ))) 

server <- function(input, output,session) { 

    values <- reactiveValues(text='') 

    observeEvent(input$print,{ 
    values$text <- input$txt 
    }) 
    observeEvent(input$preset,{ 
    presetVal <-'Some preset value' 
    session$sendInputMessage('txt', list(value = presetVal)) 
    }) 

    output$outText <- renderPrint({ 
    print(values$text) 
    }) 

} 

shinyApp(ui, server) 

那麼,爲什麼不這樣做呢?

observeEvent(input$preset,{ 
    presetVal <-'Some preset value' 
    session$sendInputMessage('txt', list(value = presetVal)) 
    values$text <- presetVal 
    }) 

我的應用程序具有很多動態UI元素和也是模塊化的濾波器其結果是在輸出中使用的濾波的數據幀的。因此,爲了獲得正確的過濾數據幀,需要在創建輸出前刷新UI元素本身。如果這是有道理的。那麼是否可以模仿按下preset後跟print的動作?

回答

0

就我所見,如果讓所有的UI元素都依賴於輸入$預置,那麼一旦按下了preset,它們都會刷新。

庫(有光澤)

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     textInput('txt','Text',value = ''), 
     actionButton('print','Print'), 
     actionButton('preset','preset'), 
     uiOutput('myOutput') 
    ), 
    mainPanel(
     verbatimTextOutput("outText") 
    ))) 

server <- function(input, output,session) { 

    # default counter just for demonstration of dependency on preset button 
    default <<- 0 

    output$myOutput <- renderUI({ 

    input$preset # to introduce dependency on preset button 

    default <<- default + 1 

    textInput('myText', '', value = default) 
    }) 

    values <- reactiveValues(text='') 

    observeEvent(input$print,{ 
    values$text <- input$txt 
    }) 
    observeEvent(input$preset,{ 
    presetVal <-'Some preset value' 
    session$sendInputMessage('txt', list(value = presetVal)) 
    values$text <- presetVal 
    }) 

    output$outText <- renderPrint({ 
    print(values$text) 
    }) 

} 

shinyApp(ui, server)