如果包含在软件包中,Shinyjs切换将不起作用

时间:2019-04-10 16:22:21

标签: r shiny shinyjs

我在R脚本中使用了shinyjs::toggle,其中我在同一文件中拥有uiserver函数。这样,它的工作效果非常好,但是,一旦我在两个独立文件(ui.Rserver.R)中使用了完全相同的代码作为包的一部分,它就不再起作用。没有错误消息,该函数只是不显示和隐藏我使用它的元素。

我用下面的最小示例进行了尝试,结果相同。 作为独立的R脚本,它可以工作,一旦我在包中使用了相同的功能,它就不会起作用。

library(shiny)
library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
 dashboardHeader(),
 dashboardSidebar(),
 dashboardBody(
   useShinyjs(),
   actionButton("button", "Click me"),
   div(id = "hello", "Hello!")
 )
)

server <- function(input, output) {
 observeEvent(input$button, {
   toggle("hello")
 })
}

shinyApp(ui, server)

在包装中:

#' Shiny App UI
#'
#' @import shiny
#' @import shinydashboard
#' @import  shinyjs
#'
#'


uitest <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    useShinyjs(),
    actionButton("button", "Click me"),
    div(id = "hello", "Hello!")
  )
)


#' Shiny app server function
#'
#' @param input provided by shiny
#' @param output provided by shiny
#'



servertest <- function(input, output) {
  observeEvent(input$button, {
    toggle("hello")
  })
}

有人可以在这里帮助我吗?可能出什么问题了?

1 个答案:

答案 0 :(得分:0)

加载软件包时,UI已预先构建,并且useShinyjs()脚本中包含的功能ui.R也不再触发。在我的程序包中,我创建了一个launchApp函数,可以启动我的应用程序,并在启动应用程序之前调用useShinyjs()。因此,我有3个独立的R文件:ui.Rserver.RlaunchApp.R

launchApp <- function() {

  shinyjs::useShinyjs()

  shinyApp(ui, server)

}