如何使用 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)
我有一个闪亮的应用程序,它使用来自 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 theJavaScript
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)