2016-03-22 23 views
1

Parlak bir uygulamada textInput() öğesini yan yana ekleyebilmem gerekir. Yeni metin kutusunun ve komut düğmesinin bulunduğu bir textInput() olmalı ve komut düğmesi her tıklandığında, etiketin ilk txtInput'tan alınması gereken listeye yeni bir metin kutusu eklenmelidir. örneğinparlak uygulamada inputText'i dinamik olarak nasıl eklersiniz?

: Ben KomutDüğmesi'ı tıkladığımda

1stTextBox:[ Application ] 
{commandButton} 

, ben KomutDüğmesi'ı altında böyle bir textInput olmalı,

Application:[  ] 

Ben 1stTextBox başka bir şey koymak ve komut düğmesini tıklarsanız textInput listesine eklenmelidir.

Fikirler bunu dinamik olarak nasıl dinamik olarak yapabilir?

Listening on http://127.0.0.1:3091 
Warning: Error in handlers$add: Key/already in use 
Stack trace (innermost first): 
    43: handlers$add 
    42: handlerManager$addHandler 
    41: startApp 
    40: runApp 
    1: shiny::runApp 
Error in handlers$add(handler, key, tail) : Key/already in use 
+0

Sunucu kodunuzda 'observeEvent' ve' renderUI' kombinasyonuna gereksiniminiz var. 'observeEvent' düğmesi tıklatılarak izlenir, ardından belirtilen etiketle ikinci bir metin girişi çizmek için 'renderUI 'kullanılır. –

+0

@warmoverflow, Parlaklığa çok yeni geldim. Hiç örneğin var mı? – user1471980

+0

İşte başka bir soru için yaptığım bir örnek. Bir numericInput'taki değişiklikleri gözlemler ve daha fazla numericInput oluşturur. http://stackoverflow.com/questions/36094718/r-shiny-dynamic-input/36096128#36096128 –

cevap

1

Bir örnek kod verir:

Bu

hatadır. Bunu denemek için komut dosyalarını kopyalayın ve tümünü çalıştırın.

Bilgileri arkada tutmak için reactiveValues nesnesini kullanıyorum. Burada, info_keeper$input_info, her öğenin [id, label, value] öğesinin 3 uzunluğunda bir karakter vektörü olması gerektiği bir listedir.

Düğmeye tıklandığında, (1) önceden tanımlanmış textInput'ların içeriği kaydedilir; (2) yeni eleman eklenmiştir.

İstenmeyen davranışlardan kaçınmak için isolate kullanıyorum.

library(shiny) 

ui <- list(
    textInput("name", "Type new text input name", value = ""), 
    actionButton("btn", "click me to create text input"), 
    uiOutput("newInputs") 
) 

server <- function(input, output) 
{ 
    info_keeper <- reactiveValues(
    input_info = list() 
) 

    observeEvent(input$btn, { 
    # copy the current contents to info_keeper 
    isolate(
    { 
     for (i in seq_along(info_keeper$input_info)) 
     { 
     id <- info_keeper$input_info[[i]][1] 
     info_keeper$input_info[[i]][3] <- input[[id]] 
     } 
    }) 

    # add new text input to the info_keeper 
    isolate(
    { 
     newid <- paste(
     "text", isolate(length(info_keeper$input_info)) + 1, sep = "") 
     info_keeper$input_info <- c(
     info_keeper$input_info, list(c(newid, input$name, ""))) 
    }) 

    # invoke the update of the text inputs 
    info_keeper 
    }) 

    output$newInputs <- renderUI({ 
    lapply(info_keeper$input_info, function(a) 
     textInput(a[1], a[2], value = a[3])) 
    }) 
} 

runApp(list(ui = ui, server = server)) 
+0

Bu hatayı "ERROR: Key/zaten kullanımda" almaya devam ediyorum. Bütün kodu rstudio penceresine yerleştirdim. Herhangi bir fikir? – user1471980

+0

Tüm hatayı asıl gönderiye yerleştirdim. – user1471980

+0

Bilmiyorum. Sadece kontrol için, rstudio'yu yeniden başlatabilir, tüm kodu editöre yapıştırabilir, sonra rstudio'nun kaynak düğmesine tıklayabilir misin? Çevremde bu, uygulamayı hata olmadan başlatır. Bu hala aynı hatayı nedense, bana bildirin. –

İlgili konular