【问题标题】:Update output in dynamic module - R Shiny更新动态模块中的输出 - R Shiny
【发布时间】:2018-09-30 20:42:45
【问题描述】:

我有一个代码允许在 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)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 2018-03-22
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多