摘要:当我将一个shinyTree (来自同名的R包)放入dropdownButton (来自shinyWidgets包)时,在用户以某种方式与树进行交互之前,似乎无法从input变量访问所讨论的树。有什么方法,我可以强迫树加载时,应用程序加载在开始?
下面是一个最小的(几乎)示例:
library(shiny)
library(shinyWidgets)
library(shinyTree)
library(magrittr)
render.as.text <- function(t) {
if (is.null(t)) {
'argument is NULL'
} else {
q <- get_selected(t)
if (length(q) == 0) {
'none selected'
} else {
paste(q, sep=', ', collapse=', ')
}
}
}
ui <- fluidPage(
dropdownButton(shinyTree('tree', checkbox=TRUE), circle=FALSE, inputId='dd')
)
server <- function(input, output, session) {
output$tree <- renderTree({ list(OptionA = structure(list(OptionAA='', OptionAB=''), stopened=TRUE), OptionB='') })
updateActionButton(session, 'dd', label='initial label')
observe({
updateActionButton(session, 'dd', label=render.as.text(input$tree))
}) %>% bindEvent(input$dd_state)
}
shinyApp(ui = ui, server = server)当我运行这个应用程序时,按钮以文本‘初始标签’开始(如预期的那样),然后当我第一次单击它时,文本更改为‘参数为NULL’(显示变量input$tree有一个NULL值),但是树在下拉列表中正确显示。如果我再次单击按钮以关闭下拉列表,文本‘参数为NULL’将保持不变,直到我实际选择树的一个或多个复选框之后(在再次单击该按钮之后),它将显示一个逗号分隔的选定选项列表,或者按预期显示“none selected”选项。
我非常希望能够引用input$tree,从用户第一次在应用程序中执行任何操作开始--理想情况下,我希望在服务器或ui代码(或两者都插入)中插入一些命令,这意味着用户第一次单击按钮时,其文本将直接更改为“none selected”,因为input$tree不再是NULL。这个是可能的吗?
发布于 2022-03-21 21:50:55
更改render.as.text函数的缺省值是否符合您的目的?
library(shiny)
library(shinyWidgets)
library(shinyTree)
library(magrittr)
render.as.text <- function(t) {
if (is.null(t)) {
'none selected'
} else {
q <- get_selected(t)
if (length(q) == 0) {
'none selected'
} else {
paste(q, sep=', ', collapse=', ')
}
}
}
ui <- fluidPage(
dropdownButton(shinyTree('tree', checkbox=TRUE), circle=FALSE, inputId='dd')
)
server <- function(input, output, session) {
output$tree <- renderTree({ list(OptionA = structure(list(OptionAA='', OptionAB=''), stopened=TRUE), OptionB='') })
updateActionButton(session, 'dd', label='initial label')
observe({
updateActionButton(session, 'dd', label=render.as.text(input$tree))
}) %>% bindEvent(input$dd_state)
}
shinyApp(ui = ui, server = server)https://stackoverflow.com/questions/71563949
复制相似问题