В Shinydashboard есть удивительное удобство помещения widget s в menuItem(menuSubItems())
часть dashboardSidebar()
. Но я хочу, чтобы несколько элементов моего пользовательского интерфейса и сервера были закодированы в модули, чтобы я мог придерживаться структуры golem ... и я не вижу четкого способа сделать это без создания нескольких функций пользовательского интерфейса один модуль. Я видел shinydashboard
golem
пример на github
, и это слишком простой пример, который не помогает.
Например, есть ли способ сделать это?
В модульном формате:
library(shiny)
library(shinydashboard)
### The Sidebar Menu with a Widget Subitem
mod_myAppSidebar_ui<-function(id) {
ns <- NS(id)
tagList(menuItem("Attributes", tabName="ourdata",
textInput("textSearch","SQL Search String", value = "")))
}
### The Dashboard Body output
mod_myAppBody_ui<-function(id) {
ns <- NS(id)
tagList(box(shiny::dataTableOutput(outputId = "OutputData")))
}
mod_myApp_server<-function(input, output, session) {
ns <- session$ns
output$OutputData<-shiny::renderDataTable({
somedata=data.frame(Rows=letters,Indexes=1:length(letters))
somedata[grepl(tolower(input$textSearch),somedata$Rows),]
})
}
### DashboardPage requires separate arguments for the UI elements
ui <- dashboardPage(header = dashboardHeader(title = "Rosetta"),
sidebar = dashboardSidebar(mod_myAppSidebar_ui("MySearch")),
body = dashboardBody(mod_myAppBody_ui("MySearch")))
server <- function(input, output, session) {
callModule(mod_myApp_server, "MySearch")
}
shinyApp(ui,server)
Есть ли способ заставить работать подобные вещи? Виджет не отображается, вероятно потому, что я не думаю, что модульная структура позволяет мне создавать два разных элемента пользовательского интерфейса для одной функциональности.