В: Как сделать так, чтобы результат блестящего приложения отображался на новой странице?

Я пытаюсь создать приложение, которое позволяет пользователю вводить данные, а затем позволяет блестящему серверу вычислять некоторые результаты, например, я мог бы заставить блестящее генерировать график или таблицу данных.

Однако из-за пространства пользовательского интерфейса мне как бы «не хватает» места. Поле ввода и документация приложения занимают весь экран. И когда блестящие сгенерируют результаты, они отобразятся в самом низу экрана.

Есть ли способ сделать блестящее всплывающее окно сообщения, чтобы показать результат?

Мой sudo-код будет:

ui <- fluidPage(
    textInput("text", "Name"),
    numericInput("age", "Age", 20),
    actionButton("demo", "Fill in fields with demo"))
server <- function(input, output, session) {
    observeEvent(input$demo, {

            ****************************
            OpenNewPage/MoveScreenDown()
            ****************************

            updateTextInput(session, "text", value = H)
            updateNumericInput(session, "age", value = "30")
    })}

При нажатии на «демонстрацию» появляется всплывающее окно с сообщением, или я могу заставить экран перейти к части результатов и разрешить тексту быть в верхней части экрана.


person Bill Chen    schedule 01.10.2016    source источник


Ответы (1)


Есть варианты, чтобы показать ваши результаты в отдельном окне. Но, может быть, будет проще иметь все в одном окне.

Вы можете использовать библиотеку ShinyBS, чтобы создать модальное окно для отображения графика. Другой вариант — использовать JavaScript для перемещения прокрутки вниз страницы. Я поместил два варианта в следующий пример, чтобы вы могли видеть, какой из них лучше для вас.

library(shiny)
library(shinyBS)
runApp(list(
  ui = shinyUI(fluidPage(
    textInput("text", "Name"),
    numericInput("age", "Age", 20),
    # option 1, using ShinyBS with a modal window
    actionButton("demo", "Using a modal"),
    # modal window to show the plot
    bsModal("largeModalID","Results", "demo", size = "large", plotOutput('plot')),       
    # Option 2, action button with a JavaScript function to move the scroll to the bottom
    # after drawing the plot.
    actionButton("demoJS", "Using JS", 
      # there is a delay to allow the renderPlot to draw the plot and you should
      # change it according to the processes performed
      onclick = "setTimeout( function() {
                  $('html, body').scrollTop( $(document).height() );},
                  300)"),         
    # to plot the results after click on "Using JS"
    uiOutput("plotUI")
   )
  ),
  server = shinyServer(function(input, output, session) {

    output$plot <- renderPlot({
      # simple plot to show
      plot(sin, -pi, 2*pi)
    })

    output$plotUI <- renderUI({
      # this UI will show a plot only if "Using JS" is clicked
      if (input$demoJS > 0)
        # the margin-top attribute is just to put the plot lower in the page
        div(style = "margin-top:800px", plotOutput('plot2'))
    })

    output$plot2 <- renderPlot({
      # another simple plot, 
      plot(sin, -pi, 2*pi)
    })

  })
))

Если вы считаете, что вариант JavaScript работает для вас лучше, вы можете начать использовать библиотеку Shinyjs, она включает в себя очень полезные функции, и вы можете легко добавить свой собственный код JavaScript в свои приложения Shiny.

person Geovany    schedule 02.10.2016