我试图在闪亮的flexdashboard中使用嵌套模块。 该代码在动态生成输入和输出中效果很好,但是在观察者中对它们进行操作(也由模块生成)时,我遇到了问题。
我看到了有关嵌套模块和UI元素的问题,以及与反应式(here, for example)有关的问题。但是我没有发现与那些UI元素的动态生成的观察者有关的任何东西...
我正在使用的简化代码是:
# inner module
DefVarsOutput<-function(input, output, session, VarsToIdentify){
ns = session$ns
len<- length(VarsToIdentify)
#DefVarsOutputUI(PatentData,VarsToIdentify)
output$DefVars<-renderUI({
tagList(
wellPanel(
lapply(1:len, function (x) {
wellPanel(
p(paste0("Variable for ",VarsToIdentify[x])),
splitLayout(cellWidths = c("5%","5%", "90%"),
actionButton(ns(paste0("Def_",VarsToIdentify[x])),
icon("arrow-right", class = NULL, lib = "font-awesome"),style='padding:4px; font-size:80%'),
wellPanel(style = "background-color: #ffffff;",
textOutput(ns(paste0("Selected_",VarsToIdentify[x])))
)
))
}))
)})
renderVarsObservers <-reactive(
lapply(1:len, function (x) {
observeEvent(input[[paste0("Def_", VarsToIdentify[x])]], {
SelectedColX<-as.character(Columns[req(input$DataVars_row_last_clicked)])
output[[paste0("Selected_",VarsToIdentify[x])]]<-renderText(SelectedColX)
},ignoreInit = TRUE)
})
)
return( renderVarsObservers())
}
UI.DefVarsOutput <- function(id,label = "Add Selection bars") {
ns <- NS(id)
tagList(
uiOutput(ns("DefVars"))
)
}
# outer module
NewDataFormat <- function(input, output, session, VarsToIdentify) {
ns<-session$ns
#......
DefVarsOutput2<-callModule(DefVarsOutput, VarsToIdentify=VarsToIdentify, "NewDataFormat2")
DefVarsOutput2
output$DefVarsUI<-renderUI({
tagList(
UI.DefVarsOutput(ns("NewDataFormat2") )
)
})
}
UI.NewDataFormat <- function(id, label = "Add New Data Format") {
# Create a namespace function using the provided id
ns <- NS(id)
tagList(
wellPanel( style='padding:4px',
#tags$div( id = 'FormatError')
uiOutput(ns("DefVarsUI"))
)
)
}
在尝试将它们转换为嵌套模块(仅是一级模块)之前,代码运行良好。
我使用ns()命名UI元素,并且它们是正确生成的,但是当我单击动作按钮时没有任何动作发生。
代码输入[[name]]用作this link中外部模块中其他UI元素的输入时有效,而在非嵌套(或外部)模块中时有效... < / p>
所以我认为这与将观察者传递到外部模块或修改UI元素标识(可能与会话有关)有关。我尝试了一些选项,但还无法弄清楚...我们应该如何为动态生成的UI元素生成或传递观察者?
感谢您的帮助。预先感谢