Я пытаюсь использовать вложенные модули в блестящей панели FlexDashboard.
Код хорошо работает при генерации динамического ввода и вывода, но у меня возникают проблемы с использованием действий над ними в наблюдателях (также генерируемых модулем).
Я видел вопросы, касающиеся модулей вложения и элементов пользовательского интерфейса, а некоторые из них касались реактивных элементов ( здесь, например ). Но я не нашел никаких связанных с динамически генерируемыми наблюдателями для этих элементов пользовательского интерфейса ...
Упрощенный код, который я использую:
# 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 () для именования элементов пользовательского интерфейса, и они были сгенерированы правильно, но когда я нажимаю на кнопки действий, никаких действий не происходит.
Кодовый ввод [[name]], по-видимому, работает при использовании в качестве ввода для других элементов пользовательского интерфейса во внешнем модуле в этой ссылке и работал, когда он был во вложенном (или внешнем) модуле. ..
Так что я думаю, что это связано с тем, как наблюдатели передаются во внешний модуль, или изменяется идентификация элементов пользовательского интерфейса (может быть, что-то, связанное с сеансом) ... Я пробовал некоторые варианты, но пока не смог выяснить ... Как мы должны генерировать или передавать наблюдателей для / используя динамически генерируемые элементы пользовательского интерфейса?
Любая помощь приветствуется. Заранее спасибо