我想在我闪亮的应用程序中添加一个蛋白质查看器。加载脚本后,我的应用程序不再响应任何输入。以下是使用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)
尝试将此代码和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")),
3Dmol jquery和闪亮的jquery之间存在冲突。
如果你运行nojquery脚本它工作:
标签$头(标签$脚本(SRC = “http://3Dmol.csb.pitt.edu/build/3Dmol-nojquery.js”))