我目前正在R6课程中包装闪亮的模块,并希望听到有关此设计的一些意见.
基本上,我对一个干净的方法(可读代码)感兴趣,并希望类允许嵌套(请参阅此处的嵌套模块部分).当前的代码符合这两个标准,但我对实现的细节有一些疑问(参见下面的"问题").
我正在编写多态模块,并认为R6是继承模块之间某些行为的好方法.创建的对象跨会话共享数据(未包含在下面的示例中),因此我构建了它们global.R
.
MyModule <- R6Class(
public = list(
initialize = function(id = shiny:::createUniqueId()){
private$id <- id
},
bind = function(){
callModule(private$module_server, private$id)
},
ui = function(ns = NS(NULL)){
ns <- NS(ns(private$id))
fluidPage(
textInput(ns("text_in"), "text", "enter some text"),
textOutput(ns("text_out"))
)
}
),
private = list(
id = NULL,
module_server = function(input, output, session){
ns <- session$ns
output$text_out <- renderText({
input$text_in
})
}
)
)
Run Code Online (Sandbox Code Playgroud)
myObj <- MyModule$new()
shinyApp(
myObj$ui(),
function(input, output, session){ myObj$bind() …
Run Code Online (Sandbox Code Playgroud)