2015-11-11 73 views
0

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

的标签集面板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) 
      }) 

我试图用shinyjs写一个数据框,如果用户点击任一标签或通知菜单如下:

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) 

我面临2个问题

1)使用shinyjs参考(here),单击选项似乎不能用于选项卡面板,我发现只提及在点击时使用tabset面板而不使用每个标签面板?

2)我无法修改onclick函数中tab1_clicked的值。它会抛出一个错误:观察者未处理的错误:未使用的参数(tab1_clicled =“YES”)

感谢任何帮助。

回答

1

我只是快速浏览你的代码,我可以看到两个错误。 onclick的第一个参数是元素的ID。在你的情况下,你需要实际标签按钮的ID,但不幸的是标签工作方式闪亮,“Tab1”实际上是标签面板容器的ID,但它不是标签按钮本身的标识。看看一个闪亮的应用程序的HTML,你会看到。选项卡有点奇怪和烦人,并且很难处理闪亮的tab按钮本身。

其次,onclick的第二个参数是表达式,但您试图运行两个表达式print("Tab1 clicked")tab1_clicled="YES"。你必须把它们包装在{},这样它被认为是一个表达式,像这样:

onclick(id, {print("Tab1 clicked"); tab1_clicled="YES"}

但不幸的是获取标签按钮的ID是困难的,所以我不认为onclick将是该

有用
+0

感谢@daattali,它修复了跟踪用户点击通知时的问题,但仍然让我无法追踪用户是否点击了某个标签。我知道你提到要做到这一点的一种方法是编写一行像输入$ Tabs1的行,但我不知道该如何处理该条件的RHS。徒劳无功我尝试如果(输入$ tabs1 == TRUE),然后tab1_clicked =“YES”。但显然这是行不通的。任何建议?感谢帮助。 – mongofresher

+0

我不认为我理解你在做什么,或者你不明白我的答案是什么?如果您希望在选中选项卡时发生某些情况,则不需要使用'onclick',只需监听由tabset输入触发的反应事件。如果你有一个navbarPage,例如ID为“navbar”的navbarPage,并且你有两个带有“tab1”和“tab2”标签的标签,那么你可以使用一个'observe({print(input $ navbar)})'来打印打开tab1时出现“tab1”,打开tab2时出现“tab2”。试验一下。 –

+0

这正是我所需要的。再次感谢。 @daattali你是一个很好的帮助 – mongofresher