блестящий: конфликт между смазкой и блестящим при использовании метода show?

Я работаю над приложением, в котором я использую пакет shinyjs, чтобы скрыть и показать вкладки элемента navbarPage. Он отлично работает, пока я не решил использовать lubridate в своем приложении для какой-то другой цели. Просто с вызовом library приложение зависает, когда я пытаюсь использовать функции отображения/скрытия:

Предупреждение: ошибка в шоу: неиспользуемый аргумент (селектор = "#navbar li a[data-value=mydata]")

Мой код (попробуйте с загрузкой смазки или без нее)

library(shiny); library(shinyjs); library(lubridate)
ui <- fluidPage(useShinyjs(), navbarPage(id="navbar", title="Analysis",
                                       tabPanel(title="Home", p("here is main page"), checkboxInput("show_other_tab", "show other tab?", value=FALSE)),
                                       tabPanel(title="My Data", value="mydata", p("some other text"))))
server = function(input, output, session){
     hide(selector = "#navbar li a[data-value=mydata]")
     observe({
          if (input$show_other_tab) {
               show(selector = "#navbar li a[data-value=mydata]")
          } else {
               hide(selector = "#navbar li a[data-value=mydata]")}})}
shinyApp(ui, server)

Это мой session.info(): R 3.4.2 [1] lubridate_1.7.1shiningjs_0.9.1shining_1.0.5

Что может быть причиной этого и как избежать этой ошибки? Спасибо


person agenis    schedule 30.11.2017    source источник
comment
примечание: строки javascript взяты у Дина Аттали здесь: github.com/daattali/shinyjs/issues/ 43   -  person agenis    schedule 30.11.2017


Ответы (1)


Если вы установите точку останова в строке 9 (где находится show) и наберете show в консоли, вы увидите, что она взята из пакета methods, а не shinyjs:

Browse[2]> show
standardGeneric for "show" defined from package "methods"

Кажется, это вызвано загрузкой смазки. Лекарством будет использование shinyjs::show в этой строке, чтобы убедиться, что она взята из пакета shinyjs.

И, кстати, начиная с Shiny 1.0.4 для этого есть встроенные функции showTab и hideTab:

ui <- navbarPage(id="navbar", title="Analysis",
                 tabPanel(title="Home", id =p("here is main page"), checkboxInput("show_other_tab", "show other tab?", value=FALSE)),
                 tabPanel(title="My Data", value="mydata", p("some other text")))
server = function(input, output, session){
  observe({
    if (input$show_other_tab) {
      showTab("navbar", target = "mydata")
    } else {
      hideTab("navbar", target = "mydata")
    }
  })
}
shinyApp(ui, server)
person shosaco    schedule 30.11.2017
comment
спасибо, это действительно помогает! Не знал этих новых функций. Это означает, что для этого мне больше не нужен пакет Shinyjs. Я также заметил, что если я загружаю lubridate перед shiningjs, у меня не было никакой ошибки. - person agenis; 30.11.2017
comment
Большое спасибо за это — я действительно застрял. - person George Dontas; 26.07.2019