【发布时间】:2018-03-08 23:25:00
【问题描述】:
我正在构建一个带有时间线和数据表的闪亮应用。我希望发生的是当用户单击时间轴中的某个项目时,表格中的相应数据会突出显示。
我已经为此提出了一个解决方案,但它看起来很hacky,R 正在给我警告信息。基本上我所做的是在数据表中创建一个标志,如果该项目被选中,则为 1,如果未选中,则为 0,然后我根据该标志格式化行。当我创建“selected”字段时,我收到一个警告,因为最初没有选择任何内容,并且 mutate 不喜欢 input$timeline_selected 为 NULL 的事实。同样由于某种原因,当我尝试将rownames = FALSE 参数添加到datatable 时,表中的所有数据都被过滤掉了(不确定那里发生了什么)。
无论如何,我想知道是否有更好的方法可以使用 HTML 或 CSS 来做到这一点。我已经尝试过寻找,但我不知道该怎么做。
最后我还想知道如果用户将鼠标悬停在时间轴中的项目上而不是选择它,如何突出显示数据表中的行。
library(shiny)
library(DT)
library(dplyr)
dataBasic <- data.frame(
id = 1:4,
content = c("Item one", "Item two" ,"Ranged item", "Item four"),
start = c("2016-01-10", "2016-01-11", "2016-01-20", "2016-02-14"),
end = c(NA, NA, "2016-02-04", NA)
)
ui <- fluidPage(
column(wellPanel(timevisOutput("timeline")
), width = 7
),
column(wellPanel(dataTableOutput(outputId = "table")
), width = 5)
)
server <- function(input, output){
# Create timeline
output$timeline <- renderTimevis({
config <- list(
orientation = "top",
multiselect = TRUE
)
timevis(dataBasic, options = config)
})
output$table <- DT::renderDataTable({
input$timeline_data %>%
mutate(selected = if_else(id %in% input$timeline_selected, 1, 0)) %>%
datatable(options = list(pageLength = 10,
columnDefs = list(list(targets = 5, visible = FALSE))
)
) %>%
formatStyle("selected", target = "row", backgroundColor = styleEqual(c(0, 1), c("transparent", "#0092FF"))
)
})
}
shinyApp(ui = ui, server = server)
【问题讨论】: