我正在尝试插入可变数量的闪亮输入(数量在反应性变量中定义)。它通常可以正常工作,但是,某些输入仅偶尔发挥预期的作用(即,如果重新加载选项卡/应用,则会得到不同的结果)。 selectInputs可能看起来有所不同(可能一个被选择,另一个未被选择),并且colourInput可能无法获得传递给第二个颜色的颜色值。在这些情况下,html标记看起来也有所不同-错误的输入并不能将所有的CSS类都添加到div标记中。
for循环外的相同代码可以正常工作(添加一组控件时),并且总是第二组输入会受到影响。
请安装colourpicker软件包以使示例正常工作:
install.packages('colourpicker')
要从gist运行示例,请使用:
shiny::runGist('6c840d245a6d77d8a462cb38b9ae0960')
对此我将不胜感激-我不知道是什么原因导致这种行为不稳定。
ui.R
library(shiny)
fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("loadExample","Load Example"),
div(id="ctrlDiv")
),
mainPanel()
)
)
server.R
library(shiny)
library(colourpicker)
function(input,output,session) {
counter <- reactiveValues(i = NULL)
observeEvent(input$loadExample, {
counter$i <- 2
})
observeEvent(counter$i, {
colors = c("#7F7F7F","#00688B")
if (!is.null(counter$i)) {
for (i in 1:counter$i) {
insertUI(selector='#ctrlDiv',where="beforeEnd",ui=HTML(paste0("
<div id='div",i,"' style='padding-top:30px;'>
<div id='aDiv",i,"'> </div>
<div id='bDiv",i,"'> </div>
<div id='cDiv",i,"'> </div>
</div>"
)))
insertUI(selector=paste0('#aDiv',i),where="afterBegin",ui=selectInput(
paste0('aInput',i),"input a",c(seq(1,i),NA),selected=i
))
insertUI(selector=paste0('#bDiv',i),where="afterBegin",ui=checkboxInput(
paste0('bInput',i),"input b",TRUE
))
insertUI(selector=paste0('#cDiv',i),where="afterBegin",ui=colourInput(
paste0('cInput',i),"input c",paste(colors[i])
))
}
}
})
}