1

我有一个闪亮的应用程序,它使用来自闪亮小部件的旋钮输入。我需要在服务器中动态更改一些参数。我知道如何使用 updateKnobInput 更改旋钮的值,但我不明白如何更改其他参数。具体来说,当用户单击某个事物时,我需要将 readOnly 从 FALSE 设置为 TRUE。

在 updateKnobInput 的文档中,它声明:“选项要更新的附加参数列表,使用旋钮输入的参数。” 不幸的是,我不明白如何实际编码

请看我的例子。当用户单击按钮时,旋钮的值应从 50 变为 15(有效),而 readOnly 旋钮应从 FALSE 变为 TRUE(无效)。

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
    knobInput("myknob", label = "My Knob", min = 0, max = 100, value = 50, readOnly = F),
    actionButton("changeknob", label = "Change the knob")
)


server <- function(input, output, session) {
    observeEvent(input$changeknob, {
        updateKnobInput(session, "myknob", value = 15, options = list(readOnly = T))
    })
}


shinyApp(ui = ui, server = server)

非常感谢您的帮助!

4

1 回答 1

0

在查看了小部件的代码后,在我看来 API 是错误的。

长话短说,在我看来,就当前的实现shinyWidgets::knobInput和 jQuery 旋钮小部件本身而言,不可能以您想要的方式实现它。

因此,您需要一种解决方法。您可以根据按下的按钮重新渲染小部件,如下例所示:

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
    uiOutput("knob_container"), 
    actionButton("changeknob", label = "Change the knob")
)


server <- function(input, output, session) {
    output$knob_container <- renderUI({
       was_pressed <- input$changeknob > 0
       knobInput("myknob", label = "My Knob", min = 0, max = 100, 
                 value = ifelse(was_pressed, 15, 50), readOnly = was_pressed)
    })
 }


shinyApp(ui = ui, server = server)
于 2021-04-09T07:30:26.163 回答