gpt4 book ai didi

r - 切换和 tabsetPanel 的 Shiny 命名空间问题

转载 作者:行者123 更新时间:2023-12-04 16:52:52 24 4
gpt4 key购买 nike

我正在寻求有关模块化设计的简单 Shiny 应用程序的帮助。我认为问题是 namespace 问题,因此下面的示例是我实际项目的简化版本。
目的是为了‘ tab_3 ’在 tabsetPanel仅显示‘ View Tab_3 ’被检查,这工作正常。我要更新 tabsetPanel但是也要选择‘ tab_3 ’当‘ View Tab_3 ' 被检查,这没有按预期触发。
我可以得到tabsetPanel还要选择‘ tab_3 ’当‘ View Tab_3 ' 被检查是否我将 tabsetPanel 的 id 包装在命名空间函数中,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, output, 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, output, session) {

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

}

shinyApp(ui = ui, server = server)

关于r - 切换和 tabsetPanel 的 Shiny 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63528776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com