繁体   English   中英

闪亮:根据索引动态添加/删除textInput行

[英]Shiny: dynamically add/ remove textInput rows based on index

根据本文,我更改了脚本:

library(shiny)

ui = fluidPage( 
  actionButton("add", "Add new Row", icon=icon("plus", class=NULL, lib="font-awesome")),
  actionButton("remove", "Remove last Row", icon=icon("times", class = NULL, lib = "font-awesome")),
  tags$div(id = 'placeholder')
)

server = function(input, output) {

  ## keep track of elements inserted and not yet removed
  inserted <- c()

  observeEvent(input$add, {
    id <- ''
    insertUI(
      selector = "#placeholder",
      where = "beforeBegin",
      ui =tags$div(
        id = id,
        fluidRow(
          column(2,
                 textInput("alias", label = h5("first"))
          ),
          column(2,
                 textInput("pop", label = h5("second"))
          ),
          column(2,
                 textInput("parent", label = h5("third"))
          ),
          column(2,
                 textInput("dims", label = h5("fifth"))
          ),
          column(2,
                 textInput("method", label = h5("fourth"))
          ),
          column(2,
                 textInput("args", label = h5("sixth"))
          )
        ) 
      )
    )

    inserted <<- c(inserted, id)

  })

  observeEvent(input$remove, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#', inserted[length(inserted)])
    )

    inserted <<- inserted[-length(inserted)]
  })

}

shinyApp(ui = ui, server = server)

我调查了这个问题,但比以前更加困惑。 add按钮可以正常工作,但是在单击remove按钮时行不会消失。 我究竟做错了什么?

谢谢!

除了分配ID,您还很亲密。 您忘记设置ID了吗? 我看到的唯一分配是: id <- '' 另外,您应该使用reactiveValues()而不是闪亮的全局变量。

请参见下面的改编代码:

library(shiny)

ui = fluidPage( 
  actionButton("add", "Add new Row", icon=icon("plus", class=NULL, lib="font-awesome")),
  actionButton("remove", "Remove last Row", icon=icon("times", class = NULL, lib = "font-awesome")),
  tags$div(id = 'placeholder')
)

server = function(input, output) {

  ## keep track of elements inserted and not yet removed
  inserted <- reactiveValues(val = 0)

  observeEvent(input$add, {
    id <- length(inserted$val) + 1
    insertUI(
      selector = "#placeholder",
      where = "beforeBegin",
      ui =tags$div(
        id = id,
        fluidRow(
          column(2,
                 textInput("alias", label = h5("first"))
          ),
          column(2,
                 textInput("pop", label = h5("second"))
          ),
          column(2,
                 textInput("parent", label = h5("third"))
          ),
          column(2,
                 textInput("dims", label = h5("fifth"))
          ),
          column(2,
                 textInput("method", label = h5("fourth"))
          ),
          column(2,
                 textInput("args", label = h5("sixth"))
          )
        ) 
      )
    )
    inserted$val <- c(inserted$val, id)
    print(inserted$val)
  })

  observeEvent(input$remove,{
    print(inserted$val)
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#', inserted$val[length(inserted$val)])
    )

    inserted$val <- inserted$val[-length(inserted$val)]
  })

}

shinyApp(ui = ui, server = server)

暂无
暂无

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

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