正如我在这个站点(shinyTree: set variable to value if checkbox is checked,shinyTree: view without selecting)上多次抱怨的那样,shinyTree上的文档严重缺乏。
考虑一下R中的以下代码
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编写,但是如果我不知道如何引用树及其节点,这是无用的。
发布于 2016-08-30 12:30:02
在服务器端渲染滑块
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变体
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)https://stackoverflow.com/questions/39226734
复制相似问题