首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R Shiny -重置shinyTree节点选择

R Shiny -重置shinyTree节点选择
EN

Stack Overflow用户
提问于 2019-06-12 13:36:34
回答 1查看 834关注 0票数 2

下面的应用程序包含一个shinyTree,一个重置按钮(Reset nodes)和一个打印输出‘选定的节点’。打印输出打印get_selected函数的输出,该函数返回选定节点的列表。

以下是启动树的屏幕截图:

未选择任何节点,因此get_selected返回一个空list()

当我做出选择时,例如节点aget_selected会正确地返回该选择:

当我单击Reset nodes时,树UI中的节点选择将被清除,但get_selected与之前的选择相比没有变化:

单击reset按钮时,观察者通过updateTree更新树,如下所示:

代码语言:javascript
复制
observeEvent(input$reset, {

    updateTree(session,"tree", data = tree)
  })

当我点击reset时,我希望get_selected返回list()。我是否错误地使用了updateTree

下面是重现上述情况的代码:

代码语言:javascript
复制
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,但都没有用:

代码语言:javascript
复制
$("#reset").onlick(function() {
                        $("#tree").jstree("deselect_all");
                        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 14:48:03

您可以在点击reset按钮时更新reactiveVal,而不是直接引用get_selected提供的数据

代码语言:javascript
复制
library(shiny)
library(shinyTree)

tree <- lapply(structure(list(a=list(a1=1,a2=2) , b="b"), stopened = TRUE) , function(x) structure(x, stopened = TRUE))

ui <- fluidPage(
  fluidPage(
    sidebarLayout(
      sidebarPanel(
        actionButton('reset', 'Reset nodes')
      ),
      mainPanel(
        shinyTree("tree", ),
        hr(),
        "Selected nodes:",
        verbatimTextOutput("idSelected")#,
      )
    )
  )
)

server <- function(input, output, session) {

  treeSelection <- reactiveVal(list())

  output$tree = renderTree({
    tree
  })

  observeEvent(input$reset, {
    updateTree(session, "tree", data = tree)
    treeSelection(list())
  })

  observeEvent(input$tree, {
    treeSelection(get_selected(input$tree, format = "classid"))
  })

  output$idSelected <- renderPrint({
    treeSelection()
  })

}

shinyApp(ui, server)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56555281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档