如何解决如何删除UI?
我无法使用“删除”按钮删除UI。我尝试添加此
removeUI(
selector = paste0("div:has(> #row","_",input$addLine," )"),multiple = TRUE,immediate = TRUE,session
)
,但不起作用。当我单击删除按钮时,什么也没有发生。我想知道我是否没有在selector
函数中正确指定removeUI
。
有没有办法使这项工作有效,还是应该尝试其他方法?
以下是可重现的示例:
library(shiny)
newlist <- as.list(c("LV1","LV2","x1","x2","x3","x4","x5","x6"))
symbol <- as.list(c("=~","~"))
row_ui <- function(id) {
ns <- NS(id)
fluidRow(
column(2,uiOutput(ns("ui_placeholder"))),column(2,uiOutput(ns("ui_placeholder3"))),uiOutput(ns("ui_placeholder2")))
)
}
row_server <- function(input,output,session) {
return_value <- reactive({paste(input$variable1,input$symbol1,paste(input$variable2,collapse = "+"))})
ns <- session$ns
output$ui_placeholder <- renderUI({
selectizeInput(ns("variable1"),"LV:",choices = c(' ',newlist),options=list(create=TRUE),selected = NULL)
})
output$ui_placeholder2 <- renderUI({
selectizeInput(ns("variable2"),"Ind:",selected = NULL,multiple = TRUE)
})
output$ui_placeholder3 <- renderUI({
selectizeInput(ns("symbol1"),"Type",symbol),selected = NULL)
})
list(return_value = return_value)
}
ui <- fluidPage(
div(id="placeholder"),actionButton("addLine","+ LV"),actionButton("removeLine","Remove UI")
)
server <- function(input,session) {
handler <- reactiveVal(list())
observeEvent(input$addLine,{
new_id <- paste("row",sep = "_")
insertUI(
selector = "#placeholder",where = "beforeBegin",ui = row_ui(new_id)
)
handler_list <- isolate(handler())
new_handler <- callModule(row_server,new_id)
handler_list <- c(handler_list,new_handler)
names(handler_list)[length(handler_list)] <- new_id
handler(handler_list)
removeUI(
selector = paste0("div:has(> #row",session
)
})
}
shinyApp(ui,server)
解决方法
也许您正在寻找这个。
library(shiny)
newlist <- as.list(c("LV1","LV2","x1","x2","x3","x4","x5","x6"))
symbol <- as.list(c("=~","~"))
row_ui <- function(id) {
ns <- NS(id)
fluidRow(
column(2,uiOutput(ns("ui_placeholder"))),column(2,uiOutput(ns("ui_placeholder3"))),uiOutput(ns("ui_placeholder2")))
)
}
row_server <- function(input,output,session) {
return_value <- reactive({paste(input$variable1,input$symbol1,paste(input$variable2,collapse = "+"))})
ns <- session$ns
output$ui_placeholder <- renderUI({
selectizeInput(ns("variable1"),"LV:",choices = c(' ',newlist),options=list(create=TRUE),selected = NULL)
})
output$ui_placeholder2 <- renderUI({
selectizeInput(ns("variable2"),"Ind:",selected = NULL,multiple = TRUE)
})
output$ui_placeholder3 <- renderUI({
selectizeInput(ns("symbol1"),"Type",symbol),selected = NULL)
})
list(return_value = return_value)
}
ui <- fluidPage(
div(id="placeholder"),actionButton("addLine","+ LV"),actionButton("removeLine","Remove UI")
)
server <- function(input,session) {
handler <- reactiveVal(list())
### keep track of elements/lines inserted and not yet removed
inserted <- c()
observeEvent(input$addLine,{
new_id <- paste("row",input$addLine,sep = "_")
insertUI(
selector = "#placeholder",where = "beforeBegin",ui = tags$div(
div(row_ui(new_id)),id = new_id
)
)
# inserted <<- c(new_id,inserted) ## removes first one first
inserted <<- c(inserted,new_id) ## removes last one first
handler_list <- isolate(handler())
new_handler <- callModule(row_server,new_id)
handler_list <- c(handler_list,new_handler)
names(handler_list)[length(handler_list)] <- new_id
handler(handler_list)
})
observeEvent(input$removeLine,{
removeUI(
## pass in appropriate div id
selector = paste0('#',inserted[length(inserted)])
)
inserted <<- inserted[-length(inserted)]
})
}
shinyApp(ui,server)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。