【问题标题】:How to change knobInputs parameter (readOnly) in shiny with updateKnobInput?如何使用 updateKnobInput 更改旋钮输入参数(只读)?
【发布时间】:2021-07-01 23:43:00
【问题描述】:

我有一个闪亮的应用程序,它使用来自闪亮小部件的旋钮输入。我需要在服务器中动态更改一些参数。我知道如何使用 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)

非常感谢您的帮助!

【问题讨论】:

标签: r shiny shiny-reactivity shinywidgets


【解决方案1】:

查看小部件的代码后,在我看来 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)

【讨论】:

  • 非常感谢您的调查!
  • 不客气,如果这回答了你的问题,你会接受这个作为答案吗(使用答案中的复选标记)?
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 2021-12-20
  • 2021-06-27
  • 2022-12-10
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多