Shinyjs:闪亮仪表板中的点击选项

Shinyjs:闪亮仪表板中的点击选项,shiny,shinydashboard,shinyjs,Shiny,Shinydashboard,Shinyjs,我有一个闪亮的仪表板应用程序,有3个选项卡和一个通知菜单。我试图在仪表板上跟踪用户活动,并希望记录他们在仪表板上的每次单击 选项卡集面板的server.R中的代码如下所示: output$tabs1=renderUI( tabsetPanel(type="tab", tabPanel(id="OverallTab","Overall Activity"), tabPanel(id="Tab1","Tab 1 details"

我有一个闪亮的仪表板应用程序,有3个选项卡和一个通知菜单。我试图在仪表板上跟踪用户活动,并希望记录他们在仪表板上的每次单击

选项卡集面板的server.R中的代码如下所示:

output$tabs1=renderUI(
    tabsetPanel(type="tab",
                tabPanel(id="OverallTab","Overall Activity"),
                tabPanel(id="Tab1","Tab 1 details"),
                tabPanel(id="Tab2","Tab 2 details"))
我的部分通知代码如下:

output$notiMenu <- renderMenu({
            all_nots <- apply(u_notd, 1, function(row) {
              notificationItem(text = row[["notification"]], icon("users"))
            })
            dropdownMenu(type = "notifications", .list = all_nots)
          })
  tab1_clicled=""
  tab2_clicked=""
  noti_clicked=""
  shinyjs::onclick("notiMenu",print("Notification clicked"),noti_clicked="YES")
  shinyjs::onclick("Tab1",print("Tab1 clicked"),tab1_clicled="YES")
  shinyjs::onclick("Tab2", print("Tab2 clicked"),tab2_clicled="YES")
  df=as.data.frame(tab1_clicked,tab2_clicked,noti_clicked)
我在这里面临两个问题

1) 单击选项似乎对选项卡面板不起作用,使用shinyjs reference(),我看到只提到对选项卡集面板使用单击选项,而不是对每个选项卡面板

2) 我无法修改onclick函数中单击的tab1_的值。它抛出一个错误,说明:观察者中的未处理错误:未使用的参数(tab1\u clicled=“YES”)


非常感谢您的帮助。

我刚刚快速浏览了您的代码,发现两个错误。
onclick
的第一个参数是元素的ID。在您的例子中,您需要实际选项卡按钮的ID,但不幸的是,选项卡的工作方式是,“Tab1”实际上是选项卡面板容器的ID,但它不是选项卡按钮本身的ID。看看闪亮应用程序的HTML,你会发现这一点。标签有点奇怪和烦人,在闪亮的屏幕上处理标签按钮本身真的很困难

其次,
onclick
的第二个参数是表达式,但是您尝试运行两个表达式
print(“Tab1 clicked”)
Tab1\u clicled=“YES”
。您需要将它们包装在
{}
中,以便将其视为一个表达式,如下所示:

onclick(id,{print(“Tab1单击”);Tab1_clicled=“YES”}


但不幸的是,获取tab按钮的id很困难,因此我认为,
onclick
在这方面不会有用

谢谢@daattali,它解决了用户单击通知时跟踪的问题,但仍然让我无法跟踪用户单击选项卡的情况。我知道您提到过这样做的一种方法是e编写一行,如输入$Tabs1,但我不知道在该条件的RHS上放置什么。我尝试了if(输入$Tabs1==TRUE),但没有成功,然后tab1_单击=“是”。但显然这不起作用。有什么建议吗?感谢您的帮助。我想我不明白您在做什么,或者您可能不明白我的答案是什么?如果您希望在选择选项卡时发生一些事情,您不需要使用
onclick
,您只需侦听由选项卡集输入触发的反应事件。如果您例如,保存一个id为“navbar”的navbarPage,你有两个id为“tab1”和“tab2”的选项卡,然后你可以有一个
observe({print(input$navbar)})
当你打开tab1时,它会打印“tab1”,当你打开tab2时,它会打印“tab2”。尝试一下。这正是我所需要的。再次感谢。你是@daattali的巨大帮助