visNetwork не отображается в панели div

Я начал использовать блестящий LLP для создания HTML-элементов, а также для создания сетевых диаграмм, используя VisNetwork. Я заметил, что visNetwork хорошо отображается, когда он размещен либо на панели скважин, либо вообще без нее. Тем не менее, он не отображается при размещении в div панели, либо с глянцевым LP или через необработанный HTML. Вкратце, я только показываю различия в коде между отсутствием в панели и разделением панели. Кто-нибудь знает, как заставить visNetwork появляться в этом конкретном типе контейнера? Я хочу использовать этот тип контейнера, потому что я хочу сохранить свой CSS таким, какой он есть, а не менять вещи только для этого одного контейнера. Кто-нибудь знает причину этой проблемы?

Это работает, когда visNetworkOutput отсутствует на панели

library(shinyLP)
library(visNetwork)

ui <- fluidPage(

visNetworkOutput("network")

)

server <- function(input, output) {

    output$network <- renderVisNetwork({
    # minimal example
        nodes <- data.frame(id = 1:3)
        edges <- data.frame(from = c(1,2), to = c(1,3))

        visNetwork(nodes, edges)
    })
}

shinyApp(ui, server)

Это не отображается, когда visNetworkOutput находится на панели

ui <- fluidPage(

    panel_div("default", "", visNetworkOutput("network"))

)

server <- function(input, output) {

    output$network <- renderVisNetwork({
        # minimal example
        nodes <- data.frame(id = 1:3)
        edges <- data.frame(from = c(1,2), to = c(1,3))

        visNetwork(nodes, edges)
    })
}

shinyApp(ui, server)

1 ответ

Решение

Это ошибка в shinyJS версия 1.1.0. Я нашел (неловкий) обходной путь и опубликовал его как ошибку в htmlwidgets и Джо Ченг увидел это и дал мне починить за 10 минут. Потрясающие...

Вот код с лучшим обходным путем (новое определение pandel_div):

library(shiny)
library(shinyLP)
library(visNetwork)

# override the currently broken definition in shinyLP version 1.1.0
panel_div <- function(class_type, panel_title, content) {
  div(class = sprintf("panel panel-%s", class_type),
      div(class = "panel-heading",
          h3(class = "panel-title", panel_title)
      ),
      div(class = "panel-body", content)
  )
}

ui <- fluidPage(
  panel_div("default", "panel1",visNetworkOutput("network")  )
)

server <- function(input, output) {

  output$network <- renderVisNetwork({ 
    # minimal network
    nodes <- data.frame(id = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))
    visNetwork(nodes,edges) 
  })

}
shinyApp(ui, server)

И вот как это выглядит:

обновление: пробовал с другим htmlwidget пакет (sigma) и получил такое же поведение. Так что подача это как htmlwidget ошибка: проблема htmlwidget panel_div

обновление: JC идентифицировал его как shinyJS ошибка. Изменил мое решение выше, чтобы отразить его предложение.

Другие вопросы по тегам