2015-12-17 4 views
2

Я использую jQuery (jQuery Core 2.1.4) для разработки части моего блестящего приложения. Кроме того, я использую новый пакет plotly для рендеринга участков. jQuery отлично работает сам по себе и plotly; однако при использовании обоих, участки от plotly исчезают. Вызов jQuery кажется причиной.Плохо исчезает при использовании jQuery в R Shiny

Есть работы вокруг, что позволяет использовать JQuery и plotly (в частности ggplotly) в том же Блестящая App?

Вот пример. Я знаю, этот пример не нужен JQuery, но только чтобы показать, как plotly участки исчезают, когда в том числе JQuery (раскомментировать линии #tags$head(tags$script(src='http://code.jquery.com/jquery-2.1.4.js')), включить его):

#Call the required libraries 
library(shiny) 
library(plotly) 
library(ggplot2) 

#Server to output plot 
server <- shinyServer(function(input, output) { 

    output$plotlyout <- renderPlotly({ 

    #Create random points 
    x <- rnorm(100) 
    y <- rnorm(100) 

    #Set to data frame 
    dats <- as.data.frame(cbind(x,y)) 

    #Plot them in plotly 
    ggplotly(ggplot(dats) + geom_point(aes(x = x, y = y))) 

    }) 

}) 

#Shiny plot 
ui <- shinyUI(

    #One page with main Panel 
    fluidPage(

     #Uncomment this to see how Jquery ruins everything 
     #tags$head(tags$script(src='http://code.jquery.com/jquery-2.1.4.js')), 

     #Panel for plot 
     mainPanel(

      #Output plot 
      plotlyOutput("plotlyout") 
    ) 
) 
) 

shinyApp(ui = ui, server = server, options = list(launch.browser = TRUE)) 

Спасибо!

+0

«но только для того, чтобы проиллюстрировать, как сюжетные сюжеты исчезают» ... что вы имеете в виду? когда я запускаю свой код, я получаю сюжетный сюжет ... – MLavoie

+0

@MLavoie Раскомментируйте строку '# tags $ head (теги $ script (src = 'http: //code.jquery.com/jquery-2.1.4.js')), и вы увидите, что это замысловато исчезает (по крайней мере, в браузере R и в Chrome) –

+0

См. мое решение. Есть ли что-нибудь еще, что вы ожидаете? –

ответ

3

Решение: Вам необходимо использовать JQuery's noconflict(). Добавить tags$head(tags$script("$.noConflict(true);")),после строка загрузки jquery.

Объяснение: JQuery уже загружается по умолчанию Shiny. Вы можете увидеть это, просмотрев источник страницы любого приложения Shiny, и вы увидите, что он загружает jquery. Когда я запустил приложение и посмотрел на консоль JavaScript на наличие ошибок, я получал странные ошибки, которые предполагали, что что-то с JQuery не работает правильно. Поэтому я подумал, что «hmm jquery определенно загружен, он загружается дважды, но он не работает, когда я загружаю его дважды. Давайте это Google!». Поэтому, если вы Google, чтобы загрузить jquery дважды на одной странице, вы увидите много ответов, говорящих, что вы используете noconflict(). Добавление его после вашей строки jquery, похоже, делает трюк.