加载Javascript后,反应输入无法正常工作

问题描述 投票:0回答:2

我想在我闪亮的应用程序中添加一个蛋白质查看器。加载脚本后,我的应用程序不再响应任何输入。以下是使用mtcars数据集的应用程序的简化版本。

我的代码:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Example"),
  dashboardSidebar(
    sidebarMenu(id = "sidebarmenu",
           selectizeInput("sample2", "Sample: ",
                               choices = c("cyl", "mpg", "disp", "hp")))),
  dashboardBody(
     fluidRow(
      box(title="3D Structure", width = 6, status="primary", solidHeader =TRUE, 
          uiOutput("structure_3d"))),
  fluidPage( 
    box(status="primary", solidHeader = FALSE, align = "center",
        DT::dataTableOutput("table")))))

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

mtcars2 <- reactive({

  mtcars2 <- mtcars

  return(mtcars2)
}) 

output$table <- DT::renderDataTable({

mtcars2 <- mtcars2()
mtcars2 <- subset(mtcars2, select = c(input$sample2))

  table <- DT::datatable(mtcars2, rownames = FALSE)

})

output$structure_3d <- renderUI({

  tabPanel("3D Structure", 
           tags$head(tags$script(src="http://3Dmol.csb.pitt.edu/build/3Dmol-min.js")),
           tags$div(
             style="height: 400px; width: 700px: position: relative;",
             class='viewer_3Dmoljs',
             'data-pdb'='2POR',
             'data-backgroundcolor'='0xffffff',
             'data-style'='cartoon'))

})

}

shinyApp(ui = ui, server = server)

如何让应用程序再次对我的输入作出反应?

编辑:

我也尝试将脚本移动到UI,但表仍然没有响应输入:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Example"),
  dashboardSidebar(
    sidebarMenu(id = "sidebarmenu",
           selectizeInput("sample2", "Sample: ",
                               choices = c("cyl", "mpg", "disp", "hp")))),
  dashboardBody(
     fluidRow(
      box(title="3D Structure", width = 6, status="primary", solidHeader =TRUE, 
          tags$head(tags$script(src="http://3Dmol.csb.pitt.edu/build/3Dmol-min.js")),
          tags$div(
            style="height: 400px; width: 700px: position: relative;",
            class='viewer_3Dmoljs',
            'data-pdb'='2POR',
            'data-backgroundcolor'='0xffffff',
            'data-style'='cartoon'))),
      fluidRow( 
        box(status="primary", solidHeader = FALSE, align = "center",
            DT::dataTableOutput("table")))))

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

mtcars2 <- reactive({

  mtcars2 <- mtcars

  return(mtcars2)
}) 

output$table <- DT::renderDataTable({

mtcars2 <- mtcars2()
mtcars2 <- subset(mtcars2, select = c(input$sample2))

  table <- DT::datatable(mtcars2, rownames = FALSE)

})

}

shinyApp(ui = ui, server = server)
r shiny shinydashboard shinyjs shiny-reactivity
2个回答
0
投票

尝试将此代码和javascript标记专门移至您的UI中。当前的renderUI()不使用任何反应内容。检查你的javascript控制台,看看脚本是否抛出任何错误。下面,将其添加为在创建UI时加载的库将是更好的形式。如果需要在响应式UI中调用javascript函数,则可以专门调用3Dmol-min.js脚本中正在加载的函数。

 dashboardPage(
    tags$head(tags$script(src="http://3Dmol.csb.pitt.edu/build/3Dmol-min.js")),

0
投票

3Dmol jquery和闪亮的jquery之间存在冲突。

如果你运行nojquery脚本它工作:

标签$头(标签$脚本(SRC = “http://3Dmol.csb.pitt.edu/build/3Dmol-nojquery.js”))

© www.soinside.com 2019 - 2024. All rights reserved.