首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于conditionalPanel选择值的ShinyTree

基于conditionalPanel选择值的ShinyTree
EN

Stack Overflow用户
提问于 2016-08-30 11:50:24
回答 1查看 607关注 0票数 0

正如我在这个站点(shinyTree: set variable to value if checkbox is checkedshinyTree: view without selecting)上多次抱怨的那样,shinyTree上的文档严重缺乏。

考虑一下R中的以下代码

代码语言:javascript
复制
library(shiny)
library(shinyTree)
ui <- shinyUI(
  shiny::fluidPage(
    h4('Shiny hierarchical checkbox'),
    shinyTree("tree", checkbox = TRUE),
    # slider
    sliderInput("slider_input",
                                          "Slider",
                                          min = 0,
                                          max = 100,
                                          value = 0,
                                          step = 0.1,
                                          width = '100%'),
                              width = 8)
)
server <- shinyServer(function(input, output, session) {  
  output$tree <- renderTree({ 
    sss=list(  'I lorem impsum'= list( 
      'I.1 lorem impsum'   =  structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),  
      'I.2 lorem impsum'   =  structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
    attr(sss[[1]],"stopened")=TRUE 
    sss
  })

})
shinyApp(ui, server)

我感兴趣的是,只有当树中的sliderInput被选中时,I.1.1 lorem impsum才会出现。

我知道,在使用checkboxGroupInputs时,我可以使用在conditionalPanel javascript condtions in shiny: is there R %in% operator in javascript?上找到的内容。这一切都很好,但由于缺乏关于shinyTree的文档(以及在这个站点上没有问到的问题),我不知道如何解决这个问题。我知道我需要使用一个conditionalPanel**,,但是我不知道如何在函数的** condition 参数中引用树及其节点。更复杂的是树本身不在input中(因为它在声明时没有input$ ),而且我不能引用output$变量。

我知道condition必须用JavaScript编写,但是如果我不知道如何引用树及其节点,这是无用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 12:30:02

在服务器端渲染滑块

代码语言:javascript
复制
library(shiny)
library(shinyTree)
ui <- shinyUI(
  shiny::fluidPage(
    h4('Shiny hierarchical checkbox'),
    shinyTree("tree", checkbox = TRUE),
    # slider
    uiOutput("slider_ui"),

    width = 8)
)
server <- shinyServer(function(input, output, session) {  
  output$tree <- renderTree({ 
    sss=list(  'I lorem impsum'= list( 
      'I.1 lorem impsum'   =  structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),  
      'I.2 lorem impsum'   =  structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
    attr(sss[[1]],"stopened")=TRUE 
    sss
  })
  output$slider_ui=renderUI({
if('I.1.1 lorem impsum' %in% get_selected(input$tree)){
  sliderInput("slider_input",
              "Slider",
              min = 0,
              max = 100,
              value = 0,
              step = 0.1,
              width = '100%')
}
  })


})
shinyApp(ui, server)

shinyjs变体

代码语言:javascript
复制
library(shiny)
library(shinyTree)
library(shinyjs)
ui <- shinyUI(
  shiny::fluidPage(
    useShinyjs(),
    h4('Shiny hierarchical checkbox'),
    shinyTree("tree", checkbox = TRUE),
    # slider
    sliderInput("slider_input",
                "Slider",
                min = 0,
                max = 100,
                value = 0,
                step = 0.1,
                width = '100%'),

    width = 8)
)
server <- shinyServer(function(input, output, session) {  
  output$tree <- renderTree({ 
    sss=list(  'I lorem impsum'= list( 
      'I.1 lorem impsum'   =  structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),  
      'I.2 lorem impsum'   =  structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
    attr(sss[[1]],"stopened")=TRUE 
    sss
  })
observe({
  if('I.1.1 lorem impsum' %in% get_selected(input$tree)){
    show("slider_input")
  }else{
    hide("slider_input")
  }
})

  })



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

https://stackoverflow.com/questions/39226734

复制
相关文章

相似问题

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