R闪亮插入fluidRow

R闪亮插入fluidRow,r,shiny,R,Shiny,我希望能够删除一个UI元素,它是fluidRow中包含的textInput,并将该元素(fluidRow和textInput)重新插入到UI中。然而,到目前为止,我没有取得任何成功 removeUI按钮删除了所有FluidRow,包括找到按钮的FluidRow。如果我试着把它们放在一个单独的HTML分区中,似乎没有什么不同。或者,如果有效,则textInput不再位于偏移流体行中。这是我的第一个闪亮的问题,所以请温柔一点,我可能犯了一些明显的错误 # Define UI ui <-

我希望能够删除一个UI元素,它是fluidRow中包含的textInput,并将该元素(fluidRow和textInput)重新插入到UI中。然而,到目前为止,我没有取得任何成功

removeUI按钮删除了所有FluidRow,包括找到按钮的FluidRow。如果我试着把它们放在一个单独的HTML分区中,似乎没有什么不同。或者,如果有效,则textInput不再位于偏移流体行中。这是我的第一个闪亮的问题,所以请温柔一点,我可能犯了一些明显的错误

  # Define UI
  ui <- fluidPage(
          fluidRow(column(2,actionButton("rmv", "Remove UI"))),
          fluidRow(column(2,actionButton("add", "Add UI"))),
          tags$div(id='aTextBox', fluidRow(column(2,offset=6,
                                                  textInput("txt", "This is no longer useful"))
                                            )
                                   )
)


   # Server logic
 server <- function(input, output) {

   observeEvent(input$rmv, {
       removeUI(
         selector = "div:has(> #aTextBox)"
      )
    })

   observeEvent(input$add, {
    insertUI(
      selector = "#add",
       where = "afterEnd",
       ui = tags$div(id='aTextBox', fluidRow(column(2,offset=6,
                                               textInput("txt", "This is no longer useful"))
                                        )
                                )
     )
   })
 }

   # Complete app with UI and server components
  shinyApp(ui, server)
#定义用户界面

ui将两处的div替换为:

  tags$div(fluidRow(id='aTextBox', column(2,offset=6,
                                          textInput("txt", "This is no longer useful"))
编辑:
正如Barbara
div(id=“placeholder”)
所指出的,可以使用此选项,以使文本框不会与
actionButton()
放在同一个div中,将两个位置的div替换为:

  tags$div(fluidRow(id='aTextBox', column(2,offset=6,
                                          textInput("txt", "This is no longer useful"))
编辑:
正如Barbara
div(id=“placeholder”)
所指出的,可以使用此选项,以使文本框不会与
actionButton()
放在同一个div中。存在的主要问题是removeUI太宽。在这种情况下,您需要直接执行
removeUI(“#aTextBox”)

然而,这段代码存在一些问题,即使它工作正常。这主要是因为它允许用户多次点击“添加”,但这将始终添加具有相同id的完全相同的元素,这是无效的HTML。大多数浏览器一开始不会抱怨它,但它会回来咬你。要解决这个问题,您可以在用户每次单击“添加”时更改ID,这样就不存在复制的可能性。或者,您可以跟踪该元素是否已插入(但尚未删除)。您可以使用一个简单的无功值来实现这一点。这似乎就是您所追求的行为,因此我在下面制作了一个模型(此代码运行良好,但可能会受益于一些重构和变量重命名),并添加了一些提示(当您不应该单击“添加”或“删除”时会弹出通知):


dynamicUI主要问题是removeUI太宽。在这种情况下,您需要直接执行
removeUI(“#aTextBox”)

然而,这段代码存在一些问题,即使它工作正常。这主要是因为它允许用户多次点击“添加”,但这将始终添加具有相同id的完全相同的元素,这是无效的HTML。大多数浏览器一开始不会抱怨它,但它会回来咬你。要解决这个问题,您可以在用户每次单击“添加”时更改ID,这样就不存在复制的可能性。或者,您可以跟踪该元素是否已插入(但尚未删除)。您可以使用一个简单的无功值来实现这一点。这似乎就是您所追求的行为,因此我在下面制作了一个模型(此代码运行良好,但可能会受益于一些重构和变量重命名),并添加了一些提示(当您不应该单击“添加”或“删除”时会弹出通知):

dynamicu