由于我在该站点(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
时。我知道使用
checkboxGroupInput
时可以使用conditionalPanel javascript condtions in shiny: is there R %in% operator in javascript?中的内容。一切都很好,但由于缺乏有关shinyTree
的文档(并且缺少本网站上提出的问题),我不确定如何解决此问题。我知道我需要使用conditionalPanel
,但是我不知道如何在函数的condition
参数中引用树及其节点。更为复杂的是,树本身不在input
中(因为声明时它没有input$
),据我所知,我无法引用output$
变量。我确实知道
condition
必须用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变体
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)