повторный выбор одного и того же варианта блестящих радиокнопок - PullRequest
0 голосов
/ 08 ноября 2018

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

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

Учитывая механизм Shiny, я могу это понять, ведь значение входа (то есть вход переключателя) не изменилось.

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

Есть ли способ заставить программу вести себя таким образом?

Код R выглядит следующим образом:

library(shiny)

ui <- tagList(
  navbarPage(
    title=NULL, id = "navBar",
    tabPanel(title = "Panel1", uiOutput('showRadioButtons')),
    tabPanel(title = "Panel2", uiOutput('showChoice'), hr(), actionButton("goBack", "Back to first panel"))
  )
)

server <- function(input, output, session)
{
  observe({
    shinyjs::hide(selector = '#navBar li a[data-value="Panel2"]')
  })

  output$showRadioButtons <- renderUI({
    radioButtons(inputId = "entries", label = NULL, choiceNames  = c("A", "B", "C", "D"), choiceValues = c(1,2,3,4), selected = 0)
  })

  output$showChoice <- renderUI({
    if (length(input$entries)>0)
      return(input$entries) else return(NULL)

  })

  observe({
    if (length(input$entries)>0)
    {
      shinyjs::hide(selector = '#navBar li a[data-value="Panel1"]')
      shinyjs::show(selector = '#navBar li a[data-value="Panel2"]')
      updateNavbarPage(session, "navBar", selected="Panel2")
    }
  })

  observe({
    if (input$goBack>0)
    {
      shinyjs::hide(selector = '#navBar li a[data-value="Panel2"]')
      shinyjs::show(selector = '#navBar li a[data-value="Panel1"]')
      updateNavbarPage(session, "navBar", selected="Panel1")
    }
  })
}

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 08 ноября 2018

Мы можем сделать это, нажав кнопку обновления на кнопке updateRadioButtons, когда нажата кнопка «Назад».

 observe({
    if (input$goBack>0)
    {
      updateRadioButtons(session,inputId = "entries", label=NULL, 
       choiceNames  = c("A", "B", "C", "D"), choiceValues = c(1,2,3,4), selected = 0)
      shinyjs::hide(selector = '#navBar li a[data-value="Panel2"]')
      shinyjs::show(selector = '#navBar li a[data-value="Panel1"]')
      updateNavbarPage(session, "navBar", selected="Panel1")
    }
  })

Полный код:

library(shiny)

ui <- tagList(
  navbarPage(
    title=NULL, id = "navBar",
    tabPanel(title = "Panel1", uiOutput('showRadioButtons')),
    tabPanel(title = "Panel2", uiOutput('showChoice'), hr(), actionButton("goBack", "Back to first panel"))
  )
)

server <- function(input, output, session)
{
  observe({
    shinyjs::hide(selector = '#navBar li a[data-value="Panel2"]')
  })

  output$showRadioButtons <- renderUI({
    radioButtons(inputId = "entries", label = NULL, choiceNames  = c("A", "B", "C", "D"), choiceValues = c(1,2,3,4), selected = 0)
  })

  output$showChoice <- renderUI({
    if (length(input$entries)>0)
      return(input$entries) else return(NULL)

  })

  observe({
    if (length(input$entries)>0)
    {
      shinyjs::hide(selector = '#navBar li a[data-value="Panel1"]')
      shinyjs::show(selector = '#navBar li a[data-value="Panel2"]')
      updateNavbarPage(session, "navBar", selected="Panel2")
    }
  })

  observe({
    if (input$goBack>0)
    {
      updateRadioButtons(session,inputId = "entries", label=NULL, 
                         choiceNames  = c("A", "B", "C", "D"), choiceValues = c(1,2,3,4), selected = 0)
      shinyjs::hide(selector = '#navBar li a[data-value="Panel2"]')
      shinyjs::show(selector = '#navBar li a[data-value="Panel1"]')
      updateNavbarPage(session, "navBar", selected="Panel1")
    }
  })
}

shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...