r - 动态创建的辅助表中的闪亮观察事件
问题描述
我使用了一个 observeEvent 来捕捉用户在表格行中单击并获取行 ID 以显示一个新选项卡,其中包含所选类别的数据的向下钻取。我希望能够在新创建的表中执行相同的操作以显示与特定选定案例相对应的数据详细信息,但我不知道如何引用动态创建的表。
library(shiny)
library(dplyr)
library(DT)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
dateRangeInput(inputId="daterange",label = "Date Range",start = "2019-09-01")
),
mainPanel(
tabsetPanel( id = "tabs",
tabPanel("Table",
dataTableOutput("summary"))
)
)
)
)
tabledata <- as_data_frame(
bind_cols(
value = c(3,6,9,2,6,8,3),
category=c("blue","red","green","blue","green","green","red")
)
)
server <- function(input, output) {
categories_summary <- reactive({
tabledata %>%
group_by(category) %>%
summarise(mean=mean(value),median=median(value)) %>%
ungroup()
})
output$summary <- DT::renderDataTable({
categories_summary()
})
tab_list <- NULL
observeEvent(input$summary_rows_selected,{
shiny::validate(
need(length(input$summary_rows_selected) > 0, "Select rows to drill down!")
)
step <- input$summary_rows_selected[length(input$summary_rows_selected)]
tab_title <- paste(categories_summary()[step, ]$category)
if(tab_title %in% tab_list == FALSE){
t1 <- tabledata[tabledata$category ==categories_summary()[step, ]$category, ]
appendTab(inputId = "tabs",
tabPanel(
tab_title,
DT::renderDataTable(t1)
))
tab_list <<- c(tab_list, tab_title)
}
})
}
shinyApp(ui = ui, server = server)
谢谢
我找到了一个可能的解决方案,通过以下方式添加一个 jQuery 观察者:
<script type="text/javascript">
$('body').on('click','div[data-value="blue"] table tbody',
function (e) {
e = e || window.event;
var data = [];
var target = e.srcElement || e.target;
while (target && target.nodeName !== "TR") {
target = target.parentNode;
}
if (target) {
var cells = target.getElementsByTagName("td");
for (var i = 0; i < cells.length; i++) {
data.push(cells[i].innerHTML);
}
}
console.log(data[0],data[1],data[2]);
}
);
</script>
它似乎运行正常。我想我可以解决这个问题。
解决方案
非常有趣的概念,我想知道一旦你将它发送到 UI,你是否会有一个新的选项卡可以在服务器内部引用?不确定这是否适用于新的 JS。也许你可以有颜色的复选框,然后只更新表格,并有多个选项卡用于不同的选择
推荐阅读
- python - 我有一个类应该充当具有属性的对象的集合。我可以在访问这些属性时调用函数吗?
- node.js - 如何使用别名制作命令处理程序
- python - 使用 pandas 数据框中的行的多折线图
- video - 如何从 H.265 压缩视频中提取 DCT 系数
- reactjs - 使用 useCallback 从 useState 发送 setState 作为道具
- google-analytics - 何时应发送增强型电子商务数据层购买数据
- excel - 自从我搞砸了应用程序更改以来,我的 VBA 工作表更改编码一直没有触发。需要帮助
- angular - Angular Auth0 - 如果经过身份验证,则获取电子邮件声明
- mysql - MySQL 将 SQL 脚本应用于数据库时出错(外键)
- javascript - 将数据发布到 Firebase - 使用发布请求 - React