【发布时间】:2018-08-06 13:29:44
【问题描述】:
我正在尝试updateSelectInput 来自子模块内的父命名空间的 selectInput。在模块函数中,据我所知,我在命名空间内,因此我无法从父命名空间访问和更新 selectInput。我该如何解决这个问题?
library(shiny)
library(shinydashboard)
moduleUI <- function(id) {
ns <- NS(id)
box(
title=actionLink(ns("link"),"This is a link"),
plotOutput(ns("plot"))
)
}
module <- function(input, output,session,number) {
output$plot <- renderPlot({
plot(number)
})
observeEvent(input$link,{
print(paste0("Number is: ",number))
updateSelectInput(session,"selectInput",selected=number) #Doesn't work
})
}
ui <-
dashboardPage(
dashboardHeader(title="Title"),
dashboardSidebar(
selectInput("selectInput","Choose one option",choices=seq(1,10),selected=1)
),
dashboardBody(
moduleUI("5"),
moduleUI("10")
)
)
server <- function(session,input, output) {
callModule(module=module,id="5",5)
callModule(module=module,id="10",10)
}
shinyApp(ui = ui, server = server)
【问题讨论】:
-
是否有理由将观察者放置在模块中?一种替代方法是让模块返回一个值,让服务器观察这个值的变化。
-
我不太确定如何做到这一点。见上面的编辑。我不能像上面那样从模块中返回值并保存在同一个变量中。
-
您的问题取决于如何使用 Shiny 模块跨名称空间工作。这是一个更广泛的问题。如果您要编辑和重命名您的问题以反映这一点,那就太好了 - 然后许多其他人可能会受益。
-
已更新标题和问题并删除了第二个示例,因为它没有多大帮助。谢谢。