代码之家  ›  专栏  ›  技术社区  ›  thothal

动态调整闪亮打印的大小

  •  0
  • thothal  · 技术社区  · 6 年前

    问题

    我使用下面的代码动态更改 shinydashboard::box 通过javascript。这在原则上是可行的,但是 plotOutput 在框中,无法按大小正确重新渲染。也就是说,无论周围的大小,打印宽度都保持不变 box . 很有趣,当我用 Inspect 在Chrome中,要查看源代码,图形会突然调整大小。

    截图

    enter image description here

    问题

    如何调整代码以调整绘图的大小 input$cols 变化?必须指出的是,在我的实际代码中,框的内容是通过模块动态呈现的。因此,我无法控制 renderPlot 功能本身。当我一“检查”图像,它就会被调整大小,我希望有一个javascript函数可以调用,它为我做这项工作。


    代码

    library(shiny)
    library(shinydashboard)
    library(shinyjs)
    library(glue)
    
    ui <- dashboardPage(
      dashboardHeader(),
      dashboardSidebar(selectInput("cols", NULL, c(2, 3, 4, 6, 12), 4)),
      dashboardBody(
        useShinyjs(),
        div(
          box(solidHeader = TRUE,
              title = "Box",
              width = 4,
              status = "info",
              sliderInput("sld", "n:", 1, 100, 50),
              plotOutput("plt")
          ), id = "box-parent")
      )) 
    
    server <- function(input, output) {
      observe({
        cols <- req(input$cols)
        runjs(code = glue('var $el = $("#box-parent > :first");',
                          '$el.removeClass(function (index, className) {{',
                          'return (className.match(/(^|\\s)col-sm-\\d+/g) || []).join(" ")',
                          '}});',
                          '$el.addClass("col-sm-{cols}");'))
      })
    
      output$plt <- renderPlot(plot(rnorm(input$sld), rnorm(input$sld)))
    }
    
    shinyApp(ui, server)
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   thothal    6 年前

    如果有人在这件事上绊倒了,这里有个解决办法。问题是因为 Shiny 不知道有些东西已经调整了大小,因为所有的事情都是在javascript级别完成的,而没有让 闪亮的 我们确实调整了元素的大小。为此,必须显式调用 window.resize 通过 $(window).trigger('resize') .

    这就解释了行为,为什么一旦你 Inspect 元素,因为在这种情况下 resize 事件也被触发,在这个例程中 闪亮的 显然是重新划分了情节。