реактивный ввод не работает после загрузки Javascript - PullRequest
0 голосов
/ 10 марта 2019

Я хотел бы добавить средство просмотра белка в мое блестящее приложение. После загрузки скрипта мое приложение больше не отвечает ни на один из моих входов. Ниже приведена упрощенная версия моего приложения с использованием набора данных 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)

Как мне заставить приложение снова реагировать на мои входные данные?

EDIT:

Я также пытался переместить скрипт в пользовательский интерфейс, но таблица по-прежнему не отвечает на ввод:

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)

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Существует конфликт между 3DMol jquery и блестящим JQuery.

Если вы запускаете скрипт nojquery, он работает:

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

0 голосов
/ 10 марта 2019

Попробуйте перейти к этому коду и тегам javascript специально для вашего интерфейса.Текущий renderUI () не использует реактивный контент.Проверьте также консоль javascript, чтобы увидеть, генерирует ли скрипт какие-либо ошибки.Ниже было бы лучше добавить его в виде библиотеки, которая загружается при создании пользовательского интерфейса.Если вам нужно вызвать функцию javascript в реактивном пользовательском интерфейсе, вы можете вызвать функции, которые загружаются в скрипт 3Dmol-min.js специально.

 dashboardPage(
    tags$head(tags$script(src="http://3Dmol.csb.pitt.edu/build/3Dmol-min.js")),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...