闪亮:for循环中的insertUI

时间:2018-08-17 13:36:24

标签: shiny shiny-reactivity

我正在尝试插入可变数量的闪亮输入(数量在反应性变量中定义)。它通常可以正常工作,但是,某些输入仅偶尔发挥预期的作用(即,如果重新加载选项卡/应用,则会得到不同的结果)。 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])
            ))
            }
        }
    })

}

0 个答案:

没有答案