【问题标题】:How to get conditionalPanel from clicking messageItem如何通过单击 messageItem 获取 conditionalPanel
【发布时间】:2017-10-31 18:40:16
【问题描述】:

在闪亮的 ui.R 中,使用 dashboardPage() 时,我的 dashboardHeader() 有一个引用列表的下拉菜单:

dropdownMenu(type = "messages",.list=Mylist)

Mylist 中填满了messageItem()'s。

但我没有使用dashboardBody()tabItems(),而是使用这样的东西:

tags$div(class="content-wrapper",
         conditionalPanel('condition',tags$section(...)))
         ,
         conditionalPanel('condition',tags$section(class="content",...))
         ) 

这样我就可以在创建leafletOutput() 时避免边距。

我的问题是,我怎样才能让我的conditionalPanel() 使用点击任何(或特定)消息作为条件?

taskItems()notificationItems() 也一样。

【问题讨论】:

    标签: jquery drop-down-menu shiny shinydashboard


    【解决方案1】:

    我认为您要问的是:“如何访问用户单击的最新项目(在下拉菜单中)?”

    如果这是问题所在,那么我必须告诉您,不幸的是,shinydashboard 不支持此功能(至少目前是这样)。 Shinydashboard 的 Github 存储库中有 an issue currently open 可以实现这一点,但我不能告诉你我们是否/何时实现它......我建议使用不同的条件机制(理想情况下由 Shiny 跟踪并可通过input$ 访问)。这对于由menuItem()s 组成的sidebarMenu() 是可能的(只要您向sidebarMenu()tabName 提供一个ID 给所有没有孩子的menuItem()s ——阅读更多关于@ 987654322@)。你说你没有使用dashboardBody()tabItems() “这样我可以在创建leafletOutput() 时避免边距。”我认为在这些情况下处理 CSS 可能会容易得多,但坚持使用 shinydashboard 提供的开箱即用功能,而不是相反。


    如果你真的想要这个,可以使用messageItem()href 参数(也出现在taskItem()notificationItem() 中)的解决方法。这有点笨拙,因为您必须跟踪所有href,并且每次单击项目时都会更新URL(在下面的示例中,哈希)。如果你这样做,现在你就有了一个可以收听的事件。但是,您不能使用条件面板,因为必须在服务器上调用getUrlHash()(它需要访问session 对象),而不是在用户界面上。

    同样,这是一种解决方法。如果可以的话,您应该尝试使用 shinydashboard 中完全支持的机制(您的应用在未来版本的包中崩溃或更改的可能性较小)。

    使用href 参数到messageItem 的解决方法:

    library(shiny)
    library(shinydashboard)
    
    # these must be unique and exist for every item
    itemIds <- c(team = "#team", team2 = "#team2", user = "#user")
    
    ui <- dashboardPage(
      dashboardHeader(
        dropdownMenu(type = "messages", badgeStatus = "success",
          messageItem("Support Team", "This is the content of a message.",
            time = "5 mins", href = itemIds[["team"]]
          ),
          messageItem("Support Team", "This is the content of another message.",
            time = "2 hours", href = itemIds[["team2"]]
          ),
          messageItem("New User", "Can I get some help?",
            time = "Today", href = itemIds[["user"]]
          )
        )
      ),
      dashboardSidebar(),
      dashboardBody(
        sliderInput("sld", "This is here so you know that other inputs are not affected by this workaround", 0, 100, 50),
        uiOutput("ui")
      )
    )
    
    server <- function(input, output, session) { 
      output$ui <- renderUI({
        hash <- getUrlHash()
        if (hash %in% itemIds) {
          paste("This is shown when", hash, "is clicked")
        }
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多