Как решить ошибку с numericInput в блестящем: ввод "прыгает" с несколькими полями ввода - PullRequest
0 голосов
/ 24 октября 2019

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

Я думал об использовании полей textInput вместо numericInput, но, похоже, это тоже не работает.

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

ui <- fluidPage(#....design etc.,

    mainPanel(
      uiOutput("inputwidgets"),

      actionButton(inputId = "number",
                   label = icon(name = "plus",
                                lib = "font-awesome")),
      actionButton(inputId = "delete_number",
                   label = icon(name = "minus",
                                lib = "font-awesome")),

      actionButton("update", "Calculate")



    )
)

server <- function(input, output) {
  reac <- reactiveValues()

  observeEvent(c(input$number,input$delete_number), {
    # you need to add 1 to not start with 0
    add <- input$number+1
    # restriction for delete_number > number
    delete <- if(input$delete_number > input$number) add else input$delete_number
    calc <- add - delete
    reac$calc <- if(calc > 0) 1:calc else 1
  })
  # By clicking the actionButton "number" an additional row appears
  observe({
    req(reac$calc)
    output$inputwidgets = renderUI({
      input_list <- lapply(reac$calc, function(i) {
      amount <- input[[paste0("amount",i)]]

        # for each dynamically generated input, give a different name
        fluidRow(
          column(2,

                 # Input: Specify the amount ----
                 numericInput(
                   paste0("amount",i),
                   label="Amount",
                   #step = 1000,
                   value = if(!is.null(amount)) amount else 0
                 )
          )
        )
      })
      do.call(tagList, input_list)
  })
})

}
# Create Shiny app ----
shinyApp(ui = ui, server = server)

Эта проблема действительно раздражает и мешает работе всего пользователя. Буду признателен за любую помощь в этом.

...