Блестящее приложение с полностью встроенным пользовательским интерфейсом HTML - Блестящее JS отображение / скрытие элементов не работает - PullRequest
4 голосов
/ 02 августа 2020
• 1000 *

Ниже представлена ​​упрощенная версия того, что у меня уже есть, я использовал Shiny JS, но функции show () и hide () ничего не делают в моем приложении. Что мне нужно сделать, чтобы это заработало? Если это невозможно с Shiny JS, как еще я могу показать / скрыть элементы html в блестящем приложении? Заранее спасибо.

app.R

server <- function(input, output) {

  library(shinyjs)
  useShinyjs(html = TRUE)

  data <- reactive({
    return("abcde")
  })
  
  observe({
    if ( data() == "abcde"  ) {
      hide("visibility-area")
    } else {
      show("visibility-area")
    }
  })

  output$some-output <- renderPrint({
    cat(data())
  })
  
}

shinyApp(ui = htmlTemplate("www/index.html"), server)

www/index.html

<!DOCTYPE html>
<html>
<head>
  <script src="shinyjs/inject.js"></script>
  <script src="shared/jquery.js" type="text/javascript"></script>
  <script src="shared/shiny.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="shared/shiny.css"/>
  <title>test</title>
</head>
<body>
    <div id="visibility-area">
      <p><span id="some-output" class="shiny-text-output"></span></p>
    </div>
</body>
</html>

global.R

shiny::addResourcePath("shinyjs", system.file("srcjs", package = "shinyjs"))

1 Ответ

2 голосов
/ 03 августа 2020

При запуске предоставленного примера я вижу следующее сообщение об ошибке в консоли javascript:

Uncaught ReferenceError: Shiny is not defined

, которое поступает из shinyjs/inject.js scropt. Проблема в том, что сценарий пытается вызвать метод объекта Shiny, но этот объект еще не существует. Вы загрузили этот файл до того, как загрузили файл shared/shiny.js, который определяет этот объект. Изменение порядка включения в нашем <head>, похоже, помогает. (Я только что переставил его последним)

<head>
  <script src="shared/jquery.js" type="text/javascript"></script>
  <script src="shared/shiny.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="shared/shiny.css"/>
  <script src="shinyjs/inject.js"></script>
  <title>test</title>
</head>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...