如何在模块中使用闪亮的javascript函数?

时间:2019-01-07 08:49:28

标签: r shiny

我想在我的闪亮模块中包含一些javascript,但是有关我尝试使用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 :(得分:4)

首先,检查浏览器是否可以找到您的shinyjavascript.js。运行您的添加并在浏览器中将其打开。与RStudio的内置应用查看器(运行应用程序时弹出的查看器)相比,Chrome具有更好的检查器模块。在浏览器的检查器中,在“元素”窗格中找到对shinyjavascript.js的引用,并且可以在“源”窗格中加载内容。

如果已存在但无法加载,请确保将文件放置在应用程序R源文件所在的子目录www中。

如果找到并加载了文件,请将其更新为以下内容,以进行一些不错的在线调试:

console.log('JavaScript file loaded')
$( document ).on("shiny:sessioninitialized", function(event) {
     console.log('session initialized')
     Shiny.onInputChange("one", "noone");           
   });

重新加载页面,然后在控制台中查找这两行。这将向我们提示您的代码运行的距离。

更新

一旦满意您的JavaScript已加载并正在运行,我们将继续进行下一个。您的应用程序会收到该值,为什么它不更新?

output$prb<-renderPrint是一个反应式,仅当{em {1}}绑定到输出控件时,才会执行 。这可能是您的情况,或者是prb不起作用。因此,我们将两者分开。

尝试更新以下内容:

input$one

这应该在“ R ”控制台上打印“ noone”。

如果可行,将新的server <- function(input, output) { callModule(examplemod, "example") observe({cat(input$one, '\n')}) } 行移至您的模块:

observe

看看那里是否有回应。

使用解决方案更新2:

因此,我详细介绍了如何调试这些问题。但是已经找到了解决方案。它需要进行3个小更改:

examplemod<- function(input, output, session) {
  output$prb<-renderPrint({
    input$one
    })
  observe({cat(input$one, '\n')})
}

但是对于您为何不能直接使用 examplemod<- function(input, output, session, one) { # 1 output$prb<-renderPrint({ one() # 2 }) callModule(examplemod, "example", reactive(input$one)) # 3 的原因,我无法提供任何解释...

相关问题