R Shiny - Использование brightjs :: toggleState с блестящим виджетом :: pickerInput - PullRequest
0 голосов
/ 28 марта 2019

Приложение ниже содержит группу переключателей с меткой Options и выражение renderUI, которое отображает:

  1. элемент ввода input$data, который зависит от значения выбранной кнопки и
  2. a actionButton input$add.

Я бы хотел отключить кнопку, пока пользователь не выберет допустимое значение для input$data.Я связал observe({ toggleState(id = 'add', condition = !is.null(input$data)) }), но это не удалось.Печать значения input$data на консоли показывает, что pickerInput инициализируется двумя отдельными значениями NULL и "":

NULL
[1] ""

, поэтому !is.null(input$data) возвращает:

[1] FALSE
[1] TRUE

вместо FALSE.

Приложение:

library(shiny)
library(shinyjs)
library(shinyWidgets)


ui <- fluidPage(shinyjs::useShinyjs(),

                prettyRadioButtons('opt', label = 'Options', choices = c('state', 'file', 'letters')),

                uiOutput('upload')

)

server <- shinyServer(function(input, output, session) {

  output$upload = renderUI({

    tagList(
      switch(input$opt, 
           'state' = pickerInput('data', 'Choose a state', 
                                 choices = state.name, 
                                 options = list(title = "States..."),
                                 choicesOpt = list(subtext = seq_along(state.name))
                                 ), 

           'file' = fileInput('data', 'Select file'), 

           'letters' = pickerInput('data', 'Choose a letter', 
                                   choices = LETTERS, 
                                   options = list(title = "Letters..."),
                                   choicesOpt = list(subtext = seq_along(LETTERS))
                                   )
           ), 

      actionButton('add', 'Add')

      )

  })

  observe({

    print(input$data) # pickerInput initializes with two values
    toggleState(id = 'add', condition = !is.null(input$data))

  })


})

shinyApp(ui, server)

Кроме того, когда вы переключаете переключатель с выбора по умолчанию state на file и затем обратно на state, pickerInput возвращает только[1] "" (не

NULL
[1] ""

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

1 Ответ

0 голосов
/ 28 марта 2019

Пустая строка '' не является нулевым объектом в R

?is.null

NULL представляет пустой объект в R: это зарезервированное слово. NULL часто возвращается выражениями и функциями, значения которых не определено.

> !is.null('')
[1] TRUE

Однако shiny::isTruthy решит это

> isTruthy('')
[1] FALSE
...