Приложение ниже содержит shinyTree
, кнопку сброса (Reset nodes
) и вывод на печать «Выбранные узлы». Вывод на печать печатает вывод функции get_selected
, которая возвращает список выбранных узлов.
Вот скриншот дерева при запуске:
Узлы не выбраны, поэтому get_selected
возвращает пустое значение list()
Когда я делаю выбор, например, узел a
, get_selected
правильно возвращает этот выбор:
Когда я нажимаю Reset nodes
, выбор узлов очищается в древовидном интерфейсе, но get_selected
не изменяется от предыдущего выбора:
При нажатии кнопки сброса наблюдатель обновляет дерево с помощью updateTree
следующим образом:
observeEvent(input$reset, {
updateTree(session,"tree", data = tree)
})
Я бы хотел, чтобы get_selected
вернул list()
, когда я нажму на сброс Я неправильно использую updateTree
?
Вот код для воспроизведения вышеуказанного:
library(shiny)
library(shinyTree)
tree = structure(list(a=list(a1=1,a2=2) , b="b"), stopened = T)
tree = lapply(tree, function(x) structure(x, stopened = T))
ui <- fluidPage(
tags$head(tags$script('
$("#reset").onlick(function() {
$("#tree").jstree("deselect_all");
}
')),
fluidPage(
sidebarLayout(
sidebarPanel(
actionButton('reset', 'Reset nodes')
),
mainPanel(
shinyTree("tree", ),
hr(),
"Selected nodes:",
verbatimTextOutput("idSelected")#,
)
)
)
)
# server
server <- function(input, output, session) {
output$tree = renderTree({
tree
})
output$idSelected <- renderPrint({
str(get_selected(input$tree, format = "classid"))
})
# An observer is used to trigger a tree update when reset is clicked.
observeEvent(input$reset, {
updateTree(session,"tree", data = tree)
print(get_selected(input$tree, format = "classid"))
})
}
shinyApp(ui, server)
Я пробовал следующий JQuery безрезультатно:
$("#reset").onlick(function() {
$("#tree").jstree("deselect_all");
}