我有一个TabPanel,其中包含几个表,这些表是通过renderUI
/ uiOutput
动态创建的。呈现所有内容后,应执行JavaScript函数。
ui <- fluidPage(mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Results", uiOutput("resultsContainer"))
)))
在服务器功能中:
output$resultsContainer <- renderUI({
numberOfGroups <- some Input somewhere
data <- get data from somewhere
//Split data into groups
grouped <- split(rownames(data), data)
//Create list of tables (divs)
table_output_list <- lapply(1:numberOfGroups, function(i) {
div(
renderTable({
data <- data.frame(grouped[i])
}),
style = "display: inline-block;vertical-align:top;")
})
table_output_list
})
在包含的JavaScript文件中,我收听了该事件:
$(document).on("shiny:value", function(e) {
if (e.name == "resultsContainer") {
e.preventDefault();
$("#resultsContainer").html(e.value);
executeCustomCodeWhichHandlesOutputTables();
}
});
由于某种原因,这不起作用,我没有输出。如果删除e.preventDefault();
,则输出在那里,但是javascript无法正常工作,我猜该事件被调用了几次(?),而不仅是在一切完成之后。
相同的方法对于单个tableOutput
/ renderTable
来说效果很好。