小编Gre*_*lia的帖子

在R6类中包装闪亮的模块

我目前正在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)

r shiny r6

19
推荐指数
1
解决办法
679
查看次数

标签 统计

r ×1

r6 ×1

shiny ×1