访问Shiny模块中的父名称空间

托比亚斯D

我正在尝试updateSelectInput从子模块内的父名称空间选择一个selectInput。据我所知,在模块函数中,我位于名称空间中,因此无法从父名称空间访问和更新selectInput。我该如何解决?

library(shiny)
library(shinydashboard)

moduleUI <- function(id) {
  ns <- NS(id)
  box(
    title=actionLink(ns("link"),"This is a link"),
    plotOutput(ns("plot"))
  )
}

module <- function(input, output,session,number) {
  output$plot <- renderPlot({
    plot(number)
  })

  observeEvent(input$link,{
    print(paste0("Number is: ",number))
    updateSelectInput(session,"selectInput",selected=number)  #Doesn't work
  })
}

ui <-  
  dashboardPage(
    dashboardHeader(title="Title"),
    dashboardSidebar(
      selectInput("selectInput","Choose one option",choices=seq(1,10),selected=1)
    ),
    dashboardBody(
      moduleUI("5"),
      moduleUI("10")
    )
  )

server <- function(session,input, output) {
  callModule(module=module,id="5",5)
  callModule(module=module,id="10",10)
}

shinyApp(ui = ui, server = server)
西蒙

花了我一段时间,但我找到了一种获取子模块以更新超级模块的方法。

Shiny设计为必须通过模块参数或返回值来访问其他模块。我们无法在模块之间传递窗口小部件ID,但是可以传递父级的会话信息。

library(shiny)

moduleUI <- function(id) {
  ns <- NS(id)
  uiOutput(ns("my_link"))
}

module <- function(input, output, session, number, parent) {
  output$my_link <- renderUI({ 
    actionLink(session$ns("link"), paste0("This is a link to ", number))
  })

  observeEvent(input$link,{
    updateSelectInput(session = parent,"selectInput",selected = number)  ### use parent session
  })
}

ui <-  fluidPage(
    selectInput("selectInput","Choose one option",choices=seq(1,10),selected=1),
    moduleUI("5"),
    moduleUI("10")
)

server <- function(session,input, output) {
  callModule(module = module, id = "5", 5, parent = session) ### pass session information
  callModule(module = module, id = "10", 10, parent = session) ### pass session information
}

shinyApp(ui = ui, server = server)

特别注意:

  • 当子模块被调用时,我们传递当前的会话信息
  • 我们在更新输入选择器时使用父会话

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从包含的子文件(php)访问父文件中的名称空间

在父名称空间中访问父构造函数

跨不同名称空间的类名称相同-如何通过直接父名称空间访问类?

在脚本中更改默认名称空间“模块”

如何访问父模块中的反应值?

让模块在父脚本中访问本地

如何访问在父模块中声明的组件

使用名称空间访问扩展类中的$ this

如何在iPython中从名称空间隐藏导入的模块?

Android Wear模块中的“意外的名称空间前缀“ app””

别名IEX中模块/名称空间的所有内容

名称空间被覆盖的模块中的Monkeypatch函数

在mapActions()中找不到Vuex模块名称空间

在mapActions()中找不到vuex模块名称空间:taskModule /?

如何从Vuex中的其他命名空间模块访问rootGetters?

为什么无法在模块中访问父项目类

在Python中,是否可以从函数中访问全局名称空间

调用父Shiny服务器中的反应数据集的Shiny模块

Rails错误访问模型中与名称空间同名的嵌套名称空间

包,名称空间和模块

如何使用rest api访问kubernetes中的名称空间?

访问头文件中定义的名称空间中的元素

如何通过Ruby中的元编程访问顶级名称空间?

在TCL中访问名称空间变量的最快方法

限制视图引擎访问Microsoft MVC中的某些名称空间

在python lxml中设置和访问名称空间

从头文件中的名称空间访问类型

在父类的self中访问匿名类的名称。

在嵌套堆栈中访问父级Cloudformation堆栈的名称