2016-10-01 7 views
0

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

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

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

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

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") 
    })} 

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

ответ

0

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

Вы можете использовать библиотеку 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 в вашем Блестящая Apps.