下面的简化代码示例允许用户向输入矩阵中输入值.第一个矩阵base_input
是静态的(具有一个输入列),并且呈现的下两个输入矩阵是动态的(具有两个输入列并且可垂直扩展).来自base_input
个的数据输入到两个动态矩阵中.我想将彩色背景添加到输入矩阵中开放供用户输入的部分.我是一个彻头彻尾的css/html新手,我设法在ui
部分拼凑了下面的css代码,以便在调用应用程序和用户将输入更改为base_input
时都能正确地给base_input
矩阵上色.试一试,但我不能对更动态的输入矩阵var_1_input
和var_2_input
执行相同的操作,如下图所示.对于如何做到这一点,有什么建议吗?
代码:
library(shinyMatrix)
library(shiny)
library(shinyjs)
matInputBase <- function(name) {
matrixInput(
name,
value = matrix(rep(20,2),2, 1,dimnames = list(c("A", "B"), NULL)),
rows = list(extend = FALSE, names = TRUE),
cols = list(extend = FALSE, names = FALSE, editableNames = FALSE),
class = "numeric"
)
}
matInputVary <- function(name, x,y) {
matrixInput(
name,
value = matrix(c(x, y), 1, 2, dimnames = list(NULL,c("X","Y"))),
rows = list(extend = TRUE, names = FALSE),
cols = list(extend = TRUE, delta = 0, names = TRUE, editableNames = FALSE),
class = "numeric"
)
}
ui <- fluidPage(
useShinyjs(),
inlineCSS(list(".highlight" = "background-color: red;")),
tags$head(
tags$script(HTML("
function applyHighlight() {
$('#base_input td:nth-child(2)').addClass('highlight');
}
$(document).on('shiny:connected', function(event) {
applyHighlight(); // Apply highlight when the app connects
});
$(document).on('shiny:inputchanged', function(event) {
if (event.name === 'base_input') {
setTimeout(applyHighlight, 10);
}
});
"))
),
sliderInput("periods","Time window (W):", min = 1, max =10, value = 5),
h5(strong("Variable (Y) over window (W):")),
matInputBase("base_input"),
uiOutput("Vectors")
)
server <- function(input, output, session) {
output$Vectors <- renderUI({
input$resetVectorBtn
varNames <- c("A", "B")
lapply(1:2, function(i) {
list(
h5(strong(paste("Adjust", varNames[i], "(Y) at time X:"))),
matInputVary(paste0("var_", i, "_input"), input$periods, input$base_input[i, 1])
)
})
})
}
shinyApp(ui, server)