切换和tabsetPanel的闪亮名称空间问题

问题描述

我正在寻找一个简单的模块化设计的Shiny应用程序的帮助。我认为问题是名称空间问题,因此下面的示例被设置为我实际项目的简化版本。

目标是使tab_3上的“ tabsetPanel”仅在选中“ View Tab_3”时显示,这很好。我想更新tabsetPanel,但是在选中“ tab_3”并且未按要求触发时也选择“ View Tab_3”。

如果我将tabsetPanel的ID包装在名称空间函数tabsetPanel中,则选中tab_3时,我可以得到View Tab_3也选择“ id = ns("tab_a_tha")”,但是然后我失去了“ tab_3”的显示/隐藏功能。

我的直觉是,解决方案在于为切换功能提供名称空间,但我没有找到任何方法的线索。

library(shiny)
library(shinyjs)

inner_moduleUI <- function(id){
  ns <- NS(id)
  tagList(
    fluidRow(checkboxInput(ns("chckbx"),"View Tab_3",value = F)),tabsetPanel(
      id = "tab_a_tha",# id = ns("tab_a_tha"),tabPanel('tab_1'),tabPanel('tab_2'),tabPanel('tab_3')
    )
  )
}



inner_module <- function(input,output,session){
  
  observeEvent(input$chckbx,{
    
    toggle(condition = input$chckbx,selector = "#tab_a_tha li a[data-value=tab_3]")
    
    if(input$chckbx == T){
      updateTabsetPanel(session,'tab_a_tha',selected = 'tab_3')
    }

  })
  
}

ui <- fluidPage(
  useShinyjs(),uiOutput('main_ui')
)

server <- function(input,session) {
  
  output$main_ui <- renderUI({inner_moduleUI('inner_ns')  })
  callModule(inner_module,'inner_ns')
  
}

shinyApp(ui = ui,server = server)

解决方法

您是对的,问题出在名称空间上。诀窍在于,您还可以使用session$ns在模块的服务器部分中访问名称空间功能。

使用此方法并将抽头ID包裹在ns函数中。我们可以使用paste0来生成toggle函数的新选择器。我们得到这样的东西:

library(shiny)
library(shinyjs)

inner_moduleUI <- function(id){
  ns <- NS(id)
  tagList(
    fluidRow(checkboxInput(ns("chckbx"),"View Tab_3",value = F)),tabsetPanel(
      id = ns("tab_a_tha"),# id = ns("tab_a_tha"),tabPanel('tab_1'),tabPanel('tab_2'),tabPanel('tab_3')
    )
  )
}



inner_module <- function(input,output,session){
  
  observeEvent(input$chckbx,{
    toggle(condition = input$chckbx,selector = paste0("#",session$ns("tab_a_tha")," li a[data-value=tab_3]"))
    
    if(input$chckbx == T){
      updateTabsetPanel(session,'tab_a_tha',selected = 'tab_3')
    }
    
  })
  
}

ui <- fluidPage(
  useShinyjs(),uiOutput('main_ui')
)

server <- function(input,session) {
  
  output$main_ui <- renderUI({inner_moduleUI('inner_ns')  })
  callModule(inner_module,'inner_ns')
  
}

shinyApp(ui = ui,server = server)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...