Zer*_*ack 7 session tabs r shiny
我正在一个闪亮的应用程序中工作,我希望能够访问用户在会话中当前选项卡上的信息.
我有一个observe事件,它监听要点击的特定按钮.简单来说,我想存储/打印用户单击此按钮时当前的选项卡.单击此按钮后,使用updateTabItems将选项卡更改为"help",updateTabItems将session,inputId和所选值作为参数.
# Observe event when someone clicks a button
observeEvent(input$help, {
# if they are logged in
if(USER$Logged == TRUE) {
# current_tab <- ???
shiny_session <<- session
updateTabItems(session, "sidebar", selected = "help")
}
})
Run Code Online (Sandbox Code Playgroud)
由于会议具有一些价值,我试图探索它.
> class(shiny_session)
[1] "ShinySession" "R6"
> names(shiny_session)
[1] ".__enclos_env__" "session"
[3] "groups" "user"
[5] "singletons" "request"
[7] "closed" "downloads"
[9] "files" "token"
[11] "clientData" "output"
[13] "input" "progressStack"
[15] "clone" "decrementBusyCount"
[17] "incrementBusyCount" "outputOptions"
[19] "manageInputs" "manageHiddenOutputs"
[21] "registerDataObj" "registerDownload"
[23] "fileUrl" "saveFileUrl"
[25] "handleRequest" "@uploadEnd"
[27] "@uploadInit" "@uploadieFinish"
[29] "reload" "reactlog"
[31] "onFlushed" "onFlush"
[33] "sendInputMessage" "sendCustomMessage"
[35] "dispatch" "sendProgress"
[37] "showProgress" "flushOutput"
[39] "defineOutput" "setShowcase"
[41] "isEnded" "isClosed"
[43] "wsClosed" "close"
[45] "unhandledError" "onInputReceived"
[47] "onEnded" "onSessionEnded"
[49] "ns" "makeScope"
[51] "initialize"
Run Code Online (Sandbox Code Playgroud)
我试图探索闪亮会话的这些元素,它们大多是结构化的功能,在当前选项卡上找不到任何内容.
UpdateTabItems似乎接受值并将它们发送到sendInputMessage.
> updateTabItems
function (session, inputId, selected = NULL)
{
message <- dropNulls(list(value = selected))
session$sendInputMessage(inputId, message)
}
Run Code Online (Sandbox Code Playgroud)
这似乎是在闪亮的应用程序中执行的某种命令堆栈,所以我停止探索它.
> shiny_session$sendInputMessage
function (inputId, message)
{
data <- list(id = inputId, message = message)
private$inputMessageQueue[[length(private$inputMessageQueue) +
1]] <- data
}
Run Code Online (Sandbox Code Playgroud)
有关如何在给定时间点访问变量中当前选项卡信息的任何建议?
谢谢.
Mic*_*jka 11
由于你没有提供一个可重复性最小的例子,我必须做出一些猜测来产生一个合适的例子 - 但它很好:)似乎你正在使用shinydashboard并且在应用程序中你sidebarMenu至少有两个选项卡.
我希望能够访问用户在会话中使用的当前选项卡上的信息.
您可以给出sidebarMenu一个ID,tabs然后您可以访问当前选项卡上的信息input$tabs.
让我们看一下下面的例子,它突出了这两个方面
首先,我们sidebarMenu以独特的方式"奖励"ID
sidebarMenu(id = "tabs",
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Help", tabName = "help", icon = icon("h-square"))
)
Run Code Online (Sandbox Code Playgroud)
然后在服务器端窥探它
observe({
print(input$tabs)
})
Run Code Online (Sandbox Code Playgroud)
完整示例:
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Example"),
dashboardSidebar(
sidebarMenu(id = "tabs", # note the id
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Help", tabName = "help", icon = icon("h-square"))
),
br(),
# Teleporting button
actionButton("teleportation", "Teleport to HELP", icon = icon("h-square"))
),
dashboardBody(
tabItems(
tabItem(tabName = "dashboard",
h2("Dashboard tab content")
),
tabItem(tabName = "help",
h2("Help tab content")
)
)
)
)
server <- function(input, output, session) {
# prints acutall tab
observe({
print(input$tabs)
})
observeEvent(input$teleportation, {
# if (USER$Logged == TRUE) {
if (input$tabs != "help") {
# it requires an ID of sidebarMenu (in this case)
updateTabItems(session, inputId = "tabs", selected = "help")
}
#}
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4527 次 |
| 最近记录: |