为什么 removeUI 会留下 UI 标签?
Why is removeUI leaving behind the UI label?
我正在尝试根据用户输入增加和减少 UI 元素的数量。这种 MRE 代码可以工作,但是当我使用 removeUI 时它会留下 UI 标签,这是我没有预料到的。关于如何使标签随输入框一起消失有什么想法吗?
## Only run this example in interactive R sessions
if (interactive()) {
# Define UI
ui <- fluidPage(
numericInput(inputId = "assessors",label = "Number of Assessors",value = 1,min = 1,step = 1),
textInput(inputId = "assessor1",label = "Assessor 1 Columns")
)
# Server logic
server <- function(input, output, session) {
tot_app<-0
observeEvent(input$assessors, {
num<-input$assessors
if(num>tot_app){#add
adds<-seq(tot_app+1,num)
for(i in adds){
here<-paste0("#assessor",i-1)
insertUI(
selector = here,
where = "afterEnd",
ui = textInput(paste0("assessor", i),
paste0("Assessor ",i," columns"))
)
}
tot_app<<-num
} else if(num<tot_app){#subtract
subs<-seq(num+1,tot_app)
for(i in subs){
removeUI(selector = paste0("#assessor",i))
}
tot_app<<-num
}
})
}
# Complete app with UI and server components
shinyApp(ui, server)
}
如帮助示例中所示,如果您使用以下语法,它会起作用:
removeUI(selector = paste0("div:has(> #assessor",i,")"))
我正在尝试根据用户输入增加和减少 UI 元素的数量。这种 MRE 代码可以工作,但是当我使用 removeUI 时它会留下 UI 标签,这是我没有预料到的。关于如何使标签随输入框一起消失有什么想法吗?
## Only run this example in interactive R sessions
if (interactive()) {
# Define UI
ui <- fluidPage(
numericInput(inputId = "assessors",label = "Number of Assessors",value = 1,min = 1,step = 1),
textInput(inputId = "assessor1",label = "Assessor 1 Columns")
)
# Server logic
server <- function(input, output, session) {
tot_app<-0
observeEvent(input$assessors, {
num<-input$assessors
if(num>tot_app){#add
adds<-seq(tot_app+1,num)
for(i in adds){
here<-paste0("#assessor",i-1)
insertUI(
selector = here,
where = "afterEnd",
ui = textInput(paste0("assessor", i),
paste0("Assessor ",i," columns"))
)
}
tot_app<<-num
} else if(num<tot_app){#subtract
subs<-seq(num+1,tot_app)
for(i in subs){
removeUI(selector = paste0("#assessor",i))
}
tot_app<<-num
}
})
}
# Complete app with UI and server components
shinyApp(ui, server)
}
如帮助示例中所示,如果您使用以下语法,它会起作用:
removeUI(selector = paste0("div:has(> #assessor",i,")"))