R Shiny-Module mit conditionalPanel und reaktiven Elementen

Ich versuche, eine komplexe Shiny-App zu modularisieren, für die ich ein @ habconditionalPanel das sollte nur bei einem bestimmten Eingabezustand erscheinen.

Bevor ich alles modular gemacht habe, befanden sich sowohl input als auch conditionalPanel inui.R, und ich könnte die Eingabe folgendermaßen referenzieren:

conditionalPanel("input.select == 'Option one'", p('Option one is selected'))

Jetzt, wo ich Dinge modularisiert habe, ist der Zugriff auf die Eingabe komplizierter. Ich dachte, das Folgende ist der Weg, um es zu tun, aber es funktioniert nicht ganz. (Hier habe ich die Dinge in einem einzigen eigenständigen Skript zusammengefasst):

library(shiny)

## Module code for 'selectorUI' and 'selector'
selectorUI <- function(id) {
  ns <- NS(id)
  selectizeInput(inputId = ns('select'),
                 label = 'Make a choice:',
                 choices = c('Option one', 'Option two'))
}

selector <- function(input, output, session) {
  reactive(input$select)
}

## Main app
ui <- shinyUI(fluidPage(
  selectorUI('id1'),
  conditionalPanel(condition = "output.selected == 'Option one'", p('Option one is selected.'))
))

server <- shinyServer(function(input, output, session) {
  output$selected <- callModule(selector, 'id1')
})

shinyApp(ui = ui, server = server)

Ich denke, das sollte funktionieren, aber es funktioniert nicht - es funktioniert nur, wenn ich einen anderen Verweis auf @ macoutput$selected in der Haupt-UI-Sektion:

ui <- shinyUI(fluidPage(
  selectorUI('id1'),
  textOutput('selected'),   ## Adding just this one line makes the next line work
  conditionalPanel(condition = "output.selected == 'Option one'", p('Option one is selected.'))
))

Leider hat dies natürlich den unerwünschten Effekt, das Ergebnis von @ zu rendertextOutput('selected'). Ich kann nur vermuten, dass der Grund, warum dies funktioniert, darin besteht, dass es die Reaktivierung auf eine Weise auslöst, die die JavaScript-Referenz allein nicht bewirkt.

Kann ich eine Idee haben, wie ich dieses conditionalPanel zum korrekten Funktionieren bringen kann?

Vielen Dank.

EDIT: Stellt sich eigentlich nicht als Bug heraus:https: //github.com/rstudio/shiny/issues/131. Siehe meine eigene Antwort unten.

Aber beachten Sie auch, dass ich das @ tatsächlich mrenderUI Lösung in der akzeptierten Antwort gegeben besser als mein OriginalconditionalPanel Ansatz

Antworten auf die Frage(4)

Ihre Antwort auf die Frage