如何使用 updateKnobInput 更改闪亮的 knobInputs 参数(只读)?

How to change knobInputs parameter (readOnly) in shiny with updateKnobInput?

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

在 updateKnobInput 的文档中指出:“选项 要更新的附加参数列表,使用 knobInput 的参数。”不幸的是,我不明白如何实际编码这个

请看我的例子。当用户单击按钮时,旋钮的值应从 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)

非常感谢您的帮助!

查看小部件的代码后,在我看来 API 有问题。

  • 原则上,小部件可以接收 readOnly 属性的更改 on the JavaScript side
  • 但是,这个API没有实现on the R side
  • 深入研究底层 jQuery Knob element 在我看来(但请记住我的 JS 不是那么可靠)readOnly 属性只能在元素启动时设置.

长话短说,在我看来,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)