繁体   English   中英

Shiny 带有 InsertUI 的 ModalDialog

[英]Shiny ModalDialog with InsertUI

我有一个 shiny 应用程序,它有一个按钮,它调用一个模式对话框,应该在其中插入一个 UI。 我使用insertUI是因为我想动态添加 UI 元素。 问题是,每当我按下操作按钮时,应用程序就会崩溃并显示以下错误消息:

Warning: Error in as.character: cannot coerce type 'closure' to vector of type 'character'
  [No stack trace available]

如果我在insertUI()中设置immediate = T则没有错误,但也没有插入 UI。 有人可以解释这里发生了什么吗? 这是一个代表。

library(shiny)

ui <- fluidPage(
  actionButton("add", "addConstraints")
)

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

  observeEvent(input$add, {

    showModal(modalDialog(
      selectizeInput(session$ns("constraintType"), label = "Select constraint type", choices = c("Comparison", "Numeric", "Interval")),
      tags$div(id = session$ns("constraintPlaceholder")),
      insertUI(
        selector = paste0("#", session$ns("constraintPlaceholder")),
        where = "afterEnd",
        ui = HTML("test")
      ),
      title = "Set Constraints",
      footer = tagList(
        modalButton("Cancel"),
        actionButton(session$ns("confirmConstraint"), "Add")
      )
    ))

  })

}

shinyApp(ui, server)

insertUI需要在modalDialog之外调用。 modalDialog里面是UI组件,应该是shinyTags,也就是HTML个元素。 insertUI是服务器调用,不能加入modalDialog

library(shiny)

ui <- fluidPage(
  actionButton("add", "addConstraints")
)

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

  observeEvent(input$add, {

    showModal(modalDialog(
      selectizeInput(session$ns("constraintType"), label = "Select constraint type", choices = c("Comparison", "Numeric", "Interval")),
      tags$div(id = session$ns("constraintPlaceholder")),
      title = "Set Constraints",
      footer = tagList(
        modalButton("Cancel"),
        actionButton(session$ns("confirmConstraint"), "Add")
      )
    ))
    insertUI(
          selector = paste0("#", session$ns("constraintPlaceholder")),
          where = "afterEnd",
          ui = HTML("test")
    )
  })

}

shinyApp(ui, server)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM