如果应用程序能够检测到最后单击或更新的小部件的 ID,那么我为闪亮的应用程序设计所采用的方法将是最简单的。
这个问题似乎可以解决问题。然而,当我使用接受的答案运行 MCVE 时,我根本没有任何反应。
当前代码如下。这本质上是一个链接的问题,明显替换了已接受的答案。
library(shiny)
ui <- fluidPage(
tags$head(
# taken from accepted answer
tags$script(
HTML("$(document).on('shiny:inputchanged', function(event) {
Shiny.setInputValue('last_input', event.name);
});")
)
# through to here
),
numericInput("num1", "Numeric", 0),
textInput("text1", "Text"),
selectInput("select1", "Select", choices = LETTERS[1:4]),
selectInput("selectize1", "Selectize", choices = letters[1:4]),
textOutput("textout")
)
server <- function(input, output, session) {
output$textout <- renderText({
input$last_input
})
}
shinyApp(ui, server)
预期行为:
观察到的行为:
检查尝试:
.ready(function(){$('input').on('shiny:inputchanged'
...而不仅仅是 .on('shiny:inputchanged'
.我是 R 程序员,不是 JS 程序员。具有这两种技能的人可以建议如何使其发挥作用吗?
你需要排除输入,这是在JS部分设置的关于要监视的事件,否则你将陷入无限循环。
请查看我的相关答案这里:
library(shiny)
ui <- fluidPage(
tags$head(
tags$script(
"$(document).on('shiny:inputchanged', function(event) {
if (event.name != 'changed') {
Shiny.setInputValue('changed', event.name);
}
});"
)
),
numericInput("num1", "Numeric", 0),
textInput("text1", "Text"),
selectInput("select1", "Select", choices = LETTERS[1:4]),
selectInput("selectize1", "Selectize", choices = letters[1:4]),
textOutput("textout")
)
server <- function(input, output, session) {
output$textout <- renderText({
input$changed
})
}
shinyApp(ui, server)
在这里可以找到相应的文档。
这是与 @ismirsehregal 相同的答案,翻译为 python 的闪亮:
from shiny import App, render, ui, reactive
app_ui = ui.page_fluid(
ui.tags.script('''
$(document).on('shiny:inputchanged', function(event) {
if (event.name != 'changed') {
Shiny.setInputValue('changed', event.name);
}
});'''),
ui.input_text("test", "Test"),
ui.input_text("test2", "Test2"),
ui.output_text_verbatim("changed"),
)
def server(input, output, session):
@output
@render.text
def changed():
return input.changed()
app = App(app_ui, server)