Как использовать блестящие функции JavaScript с модулями? - PullRequest
0 голосов
/ 07 января 2019

Я хочу включить некоторый javascript в мой блестящий модуль, но описание того, что я пробовал, не отображается в конечном приложении. Что я делаю не так?

App.r:

    library(shiny)
    source("examplemod.R")
    ui <- fluidPage(
      tags$head(
        tags$script(src="shinyjavascript.js")
      ),
      sidebarLayout(
        sidebarPanel(
          examplemodUI("example")
        ),
        mainPanel(

        )
      )
    )

    server <- function(input, output) {
      callModule(examplemod, "example")


    }

    shinyApp(ui, server)

Модуль:

   examplemodUI<-function(id){
      ns <- NS(id)

      tagList(

        textOutput(ns("prb"))

      ) 
    }

    examplemod<- function(input, output, session) {

      output$prb<-renderPrint({

        input$one

        })
    }

shinyjavascript.js

    $( document ).on("shiny:sessioninitialized", function(event) {
         Shiny.onInputChange("one", "noone");           
       });

1 Ответ

0 голосов
/ 07 января 2019

Сначала убедитесь, что ваш 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 напрямую ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...