更新动态模块中的输出 - R Shiny

时间:2018-04-20 07:34:37

标签: r shiny

我有一个代码,允许在Shiny应用程序中动态添加模块。该模块由selectInput组成,可以通过单击“添加过滤器”按钮添加。

我尝试做的是将文本放在每个selectInput小部件的右侧,当用户单击执行按钮并且等于selectInput

上的选择时,该值会更新

我不知道该怎么做。许多尝试都没有成功......

代码如下:

library(shiny)

moduleFilterUI <- function(id) {
ns <- NS(id)
uiOutput(ns("SymbolicFilter"))
}


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

output$SymbolicFilter <- renderUI({
    fluidRow(
        column(width = 4, selectInput(session$ns("cname"), "Column name", choices =  c(1:5)))
    )
})

}

ui <- fluidPage(
    fluidRow(
       actionButton("addSymbolicFilterModule", "Add filter"),
        actionButton("Filter", "Perform"),
        uiOutput("symbolicFilters"))
    )
)

server <- function(input, output, session) {
    symbolicFilterModules <- list()
    makeReactiveBinding("symbolicFilterModules") 

observeEvent(input$addSymbolicFilterModule, {
    duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", input$addSymbolicFilterModule)
    symbolicFilterModules <<- c(symbolicFilterModules, list(moduleSymbolicFilterUI(duplicateSymbolicFilterid)))
    callModule(moduleSymbolicFilter, duplicateSymbolicFilterid)


    shinyjs::disable("addSymbolicFilterModule")
    iLast <- length(symbolicFilterModules)
    for (i in 1:(iLast-1)){
        duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", i)
        updateSelectInput(session, paste0(duplicateSymbolicFilterid,"-cname"),
                          selected=input[[paste0(duplicateSymbolicFilterid,"-cname")]])
    }
})


observeEvent(input$Filter,{
    shinyjs::enable("addSymbolicFilterModule")
    iLast <- length(symbolicFilterModules)
    duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", iLast)
    cname <- input[[paste0(duplicateSymbolicFilterid,"-cname")]]

    for (i in 1:(iLast)){
        duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", i)
        updateSelectInput(session, paste0(duplicateSymbolicFilterid,"-cname"),
                          selected=input[[paste0(duplicateSymbolicFilterid,"-cname")]])

    }
})


output$symbolicFilters <- renderUI({
    symbolicFilterModules
})

}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

也许您已经解决了问题,但是... 您将模块命名为moduleFilterUI,但是您调用了moduleSymbolicFilterUI ...