반응 값을 사용하여 selectizeInput 위젯을로드하고 싶습니다. 간단한 반짝이는 응용 프로그램으로이 작업을 수행 할 수 있지만 모듈로 재구성하려고 할 때이를 복제 할 수없는 것 같습니다.반짝 이는 모듈에서 updateSelectizeInput
다음 코드에는 입력 위젯과 버튼이있는 간단한 앱이 있습니다. 버튼을 누른 후 selectizeInput()
위젯을 반응 변수에 저장된 값으로 업데이트하려고합니다.
library(shiny)
# GLOBAL VAR TO BE LOADED after pressing the button
# -------------
STORED <- reactiveValues(choices = c("a", "b", "c")
, selected = c("c"))
# UI
# -------------
ui <- fixedPage(
wellPanel(
# input widget
selectInput("widget1"
, "label"
,choices = c("WRONG A","WRONG B","WRONG C")
,selected="WRONG A"
)
# update button
, actionButton("plotBtn"
, "update"
, class = "btn-primary")
)
)
# SERVER
# -------------
server <- function(input, output, session) {
observeEvent(input$plotBtn,{
message("update button was pressed")
updateSelectInput(session
,"widget1"
,choices = STORED$choices
, selected = STORED$selected
)
})
}
# APP
shinyApp(ui, server)
단추를 누르면 위젯이 "c"가 선택된 상태로 올바르게 업데이트되고 선택 사항을 올바르게 가져옵니다. 그러나 반짝이는 모듈로 쓰려고하면 버튼이 작동하지 않습니다.
라이브러리 (반짝)
# INIT VARS TO BE LOADED AFTER PRESSING THE BUTTON
# ------------------------------------------------------------------------------
STORED <- reactiveValues(choices = c("a", "b", "c")
, selected = c("c"))
# MODULE SELECTIZEINPUT
# ------------------------------------------------------------------------------
input_widgetUI <- function(id) {
ns <- NS(id)
selectizeInput(ns("input_widget")
, label = "label"
, choices = c("WRONG A","WRONG B","WRONG C")
, selected = "WRONG A"
)
}
# MODULE BUTTON
# ------------------------------------------------------------------------------
plotBtnUI <- function(id){
ns <- NS(id)
fluidPage(actionButton(ns("plotBtn"), "update", class = "btn-primary"))
}
plotBtn <- function(input, output, session) {
ns <- session$ns
print("Loading plotBtn()")
observeEvent(input$plotBtn, {
message("update button was pressed")
updateSelectizeInput(session
, ns("widget1")
, choices = STORED$choices
, selected= STORED$selected
)
})
}
# #############################################################################
# SHINY APP
# #############################################################################
ui <- fixedPage(
wellPanel(
input_widgetUI("widget1")
, plotBtnUI("button")
)
)
server <- function(input, output, session) {
callModule(plotBtn, "button")
}
shinyApp(ui, server)
는 내가 잘못된 ID를 사용하고있을 수 있습니다 보라. 어떤 제안이라도 대환영입니다! 감사합니다
왜 모듈을 사용하고 있습니까? 너는 단지 서버 안에 모든 것을 넣을 수는 없다/ui –
모듈은 때때로 매우 유익 할 수있다. 특히 많은 id로 작업 할 때 그렇다. –