Сначала убедитесь, что ваш shinyjavascript.js
может быть найден браузером. Запустите ваше дополнение и откройте его в браузере. Chrome имеет лучший модуль инспектора, чем встроенный просмотрщик приложений RStudio (тот, который появляется при запуске приложения). В инспекторе браузера найдите ссылку на shinyjavascript.js
как на панели «Элементы», так и на то, что содержимое можно загрузить на панели «Источники».
Если он есть, но не может быть загружен, убедитесь, что файл находится в подкаталоге www
, из которого расположены исходные файлы R вашего приложения.
Если файл найден и загружен, обновите его следующим образом для отладки:
console.log('JavaScript file loaded')
$( document ).on("shiny:sessioninitialized", function(event) {
console.log('session initialized')
Shiny.onInputChange("one", "noone");
});
Перезагрузите страницу и найдите эти две строки в консоли. Это даст нам подсказку о том, как далеко работает ваш код.
Обновление:
Как только ваш javascript будет загружен и запущен, мы перейдем к следующему. Получает ли ваше приложение значение и почему оно не обновляется?
output$prb<-renderPrint
является реактивом, который выполняет только тогда и только тогда, когда Shiny как prb
привязан к выходному элементу управления. Это может быть ваш случай, или input$one
не работает. Итак, мы разделяем их.
Попробуйте обновить следующее:
server <- function(input, output) {
callModule(examplemod, "example")
observe({cat(input$one, '\n')})
}
Это должно вывести «noone» на консоль R .
Если это работает, переместите новую строку observe
в свой модуль:
examplemod<- function(input, output, session) {
output$prb<-renderPrint({
input$one
})
observe({cat(input$one, '\n')})
}
и посмотрите, получите ли вы ответ.
Обновление 2 с решением:
Итак, я подробно описал, как бы отладить эти проблемы. Но нашли решение. Требуется 3 небольших изменения:
examplemod<- function(input, output, session, one) { # 1
output$prb<-renderPrint({
one() # 2
})
callModule(examplemod, "example", reactive(input$one)) # 3
Но я не могу дать никакого объяснения, почему вы не можете использовать input
напрямую ...