讓我們假設我有一個最起碼的作業實體,如
。library(shiny)
library(shinyTree)
ui <- fluidPage()
shinyTree("tree", contextmenu = TRUE。 搜索 = TRUE。 unique = TRUE。 排序 = TRUE)
)
server < - function(input, 輸出,會話) {
output$tree <- renderTree({)
list()
root1 = "",
root2 = list()
SubListA = list(leaf1 = ""。 leaf2 = ""。 leaf3=""),
SubListB = list(leafA = ""。 leafB = "")
),
root3 = list()
SubListA = list(leaf1 = ""。 leaf2 = ""。 leaf3=""),
SubListB = list(leafA = ""。 leafB = "")
)
)
})
}
shinyApp(ui, server)。
這就生成了一個shinyTree(jstree),就像
一樣如果我在展開樹時點擊左邊的一個小三角形,是否可以運行一個函式(不一定選擇任何東西)。我正在考慮使用帶有onclick事件的shinyjs包,但并沒有真正管理所有的東西
uj5u.com熱心網友回復:
你可以使用jstree events 來觸發shiny observer來執行一個函式。在下面的例子中,JS代碼將用擴展節點的名稱更新input$expanded_node的值,然后相關的觀察器將被觸發。
library(shiny)
library(shinyTree)
ui <- fluidPage()
shinyTree("tree", contextmenu = TRUE。 搜索 = TRUE。 unique = TRUE。 排序= TRUE),
tags$script(HTML('
// "當一個節點被打開并且影片完成時被觸發"
$("#tree").on("after_open.jstree", function (e, data) {
Shiny.onInputChange("expended_node", data.node.text, {priority: "event"})。
});
')),
verbatimTextOutput("function_result")
)
服務器 < - function(input, 輸出,會話) {
output$tree <- renderTree({)
list()
root1 = "",
root2 = list()
SubListA = list(leaf1 = ""。 leaf2 = ""。 leaf3=""),
SubListB = list(leafA = ""。 leafB = "")
),
root3 = list()
SubListA = list(leaf1 = ""。 leaf2 = ""。 leaf3=""),
SubListB = list(leafA = ""。 leafB = "")
)
)
})
結果<- reactiveValues()
observeEvent(input$expanded_node, {)
# execute a function ...
result$data < - runif(1。 1, 1e6)
result$node <- input$expanded_node
})
output$function_result <- renderPrint({)
paste("Node:", result$node, ", Result: ", result$data)
})
}
shinyApp(ui, server)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/322192.html
標籤:
下一篇:R對多個模式進行精確匹配

