2016-04-14 19 views
1

Soruparlak r - menuItem içeride oluşturulmuyorsa uiOutput

Neden server oluşturulan ve uiOutput() ile ui bir menuItem() görüntülenen alamadım üzerinde işlenen oluyor bir sliderInput() yapar?

Ben server üzerinde sliderInput üreten ediyorum bu basit uygulamasında Örnek

(menuItem kasten dışarı yorum unutmayın), ve o Ancak

library(shiny) 
library(shinydashboard) 

rm(ui, server) 

ui <- dashboardPage(
    dashboardHeader(), 

    dashboardSidebar(
     sidebarMenu(
      #menuItem(text = "data options", 
         checkboxGroupInput(inputId = "cbg_group1", label = "group 1", 
             choices = c("some","check","boxes","to","choose","from")), 
         uiOutput("sli_val1"), 
         checkboxGroupInput(inputId = "cbg_group2", label = "group 2", 
              choices = c("another","set","of","check","boxes")), 
      #    ), 
      menuItem(text = "another tab") 
      ) 
    ), 
    dashboardBody() 
) 

server <- function(input, output, session){ 

    withProgress(message = "loading page", value=0.1, { 
     ## simulate loading some data 
     Sys.sleep(3) 

     ## slider input 
     output$sli_val1 <- renderUI({ 
      sliderInput(inputId = "sli_val1", 
         label = "values", min = 0, max = 100, 
         value = c(25, 75)) 
     }) 
     setProgress(value=1, detail="Complete") 
    }) 
} 

shinyApp(ui = ui, server = server) 

beklendiği gibi çalışır zaman 'u bir menuItem()10 içinde taşıyın, çıktı artık üretmez:

ui <- dashboardPage(
    dashboardHeader(), 

    dashboardSidebar(
     sidebarMenu(
      menuItem(text = "data options", 
        checkboxGroupInput(inputId = "cbg_group1", label = "group 1", 
             choices = c("some","check","boxes","to","choose","from")), 
        uiOutput("sli_val1"), 
        checkboxGroupInput(inputId = "cbg_group2", label = "group 2", 
             choices = c("another","set","of","check","boxes")) 
          ), 
      menuItem(text = "another tab") 
      ) 
    ), 
    dashboardBody() 
) 
+0

mi [bu] (http://stackoverflow.com/questions/33430813/using-uioutput-in: Burada

2 kod ekstra hatları (ve modifiye çıktı Kimliği) ile asgari bir düzeltmedir -menusubitem-of-shinydashboard? rq = 1) sorunuza cevap mı? –

+0

@MikaelJumppanen - oldukça değil: 'menuSubItem()' ı kullanmıyorum, bu yüzden 'tabName' tanımlayamıyorum – SymbolixAU

cevap

2

Öncelikle, çoğaltılan Ids'ı önlemek için uiOutput("sli_val1")'u olarak değiştirirdim.

Sorununuzla ilgili olarak: Shiny belgenin içinden geçtiğinde ve olası tüm çıktıları oluşturduğunda/bağladığında bu garip bir durumdur. Varsayılan eylem, tüm gizli çıkış öğelerini görmezden gelmektir - bu tamamen yok sayılmaz (çıkış "sli_val1" tamamıyla bağlanır), ancak işlevleri askıya alınmaz, çocukların oluşturulmasına izin verilmez.

Yani sorun şu ki, bu çıktının başlangıcında, bu çıktı alt ağaçta gizlenir ve oradan yok sayılır.

düzeltme

outputOptions(output, "out_sli_val1", suspendWhenHidden = FALSE) 

Ama nasıl ve nerede arayarak bu süspansiyonuna davranışı unsetting yapılabilir? Bu seçenek, "veri yüklemenizi" çalıştırmadan önce ayarlanmalıdır. Ancak, output$out_sli_val1'un kendisine atanmış bir değeri yoksa (NULL) hataları atar. Bunu önlemek için, "veri yükü" üzerinde geçersiz kılan boş bir UI-yığınını başlatabilirsiniz.

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(
     menuItem(text = "data options", 
     checkboxGroupInput(inputId = "cbg_group1", label = "group 1", 
          choices = c("some","check","boxes","to","choose","from")), 
     uiOutput("out_sli_val1"), 
     checkboxGroupInput(inputId = "cbg_group2", label = "group 2", 
          choices = c("another","set","of","check","boxes")) 
    ), 
     menuItem(text = "another tab") 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output, session){ 
    output$out_sli_val1 <- renderUI({}) 
    outputOptions(output, "out_sli_val1", suspendWhenHidden = FALSE) 

    withProgress(message = "loading page", value=0.1, { 
    ## simulate loading some data 
    Sys.sleep(3) 

    ## slider input 
    output$out_sli_val1 <- renderUI({ 
     sliderInput(inputId = "sli_val1", label = "values", min = 0, max = 100, value = c(25, 75)) 
    }) 

    setProgress(value=1, detail="Complete") 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

Nice answer! Hata ayıklama işlemini nasıl yaptınız? –

+2

@MikaelJumppanen Bir yerde bu gizli sorunu okudum sandım. Bu yüzden çıktının (costom message handler + action butonu) manuel olarak açılmaya/bağlanmaya çalışmasına ve çıktı divunun tepki vermesi durumunda HTML'ye bakmaya başladım. Ve surpirisingly, subMenu görünür olduğu anda yaptı. Bu görünüme bağlanmanın/bağlanmanın bağlayıcılığı/bağlayıcılığını denedim, ancak daha basit bir yaklaşım buldum. Boş renderUI init bir önseziydi. –

+0

Bunun amaçlanmış davranış olup olmadığından emin değilim. –