我在闪亮的应用程序中有一个rhandsontable,有2行。它使用reactiveValues()来加载其中的值。
禁止通过拖动单元格来创建其他行 fillHandle = list(direction='vertical', autoInsertRow=FALSE))
应该允许用户通过上下文菜单创建其他行,但不超过10.我使用customOpts进行操作,用户可以添加新行直到nrow(table) == 10
,但是我可以用javascript非常糟糕。我尝试以不同的方式(请参阅下面的代码),但无法使其工作。另外,有没有办法以另一种方式做到这一点?
以下是我到目前为止的代码片段:
output$table <- renderRHandsontable({
rhandsontable(data.frame(rv_values),
fillHandle = list(direction='vertical', autoInsertRow=FALSE)) %>%
hot_context_menu(allowRowEdit = TRUE, allowColEdit = FALSE)
})
我试图像这样手动更改allowRowEdit
,但无法弄清楚如何让它发挥作用:
observeEvent(input$table, {
if(nrow(hot_to_r(input$table)) > 10)
#magic happens here
})
有什么想法吗?
答案 0 :(得分:2)
maxRows = 10
添加到rhandsontable
,以及它。
rhandsontable(data.frame(rv_data),
fillHandle = list(direction='vertical', autoInsertRow=FALSE),
maxRows = 10) %>%
hot_context_menu(allowRowEdit = TRUE, allowColEdit = FALSE)
答案 1 :(得分:1)
这样做你想要的吗?它没有使用Javascript,但它允许用户添加行,直到达到最大值:
max_rows = 5
require(shiny)
library(DT)
ui<-shinyUI(
fluidPage(
actionButton("action","Add row"),
rHandsontableOutput("table")
)
)
server <- function(input, output, session) {
rv_values <- reactiveVal()
rv_values(head(mtcars,3))
observeEvent(input$action,{
if(!nrow(rv_values())==5)
{
rv_values(head(mtcars,nrow(rv_values())+1))
}
else
{
showModal(modalDialog(
title = "Important message",
"Already reached maximum number of rows!"
))
}
}
)
output$table <- renderRHandsontable({
rhandsontable(data.frame(rv_values()),
fillHandle = list(direction='vertical', autoInsertRow=FALSE)) %>%
hot_context_menu(allowRowEdit = TRUE, allowColEdit = FALSE)
})
}
shinyApp(ui,server)
希望这有帮助!