rhandsontable如何限制最大值行数

时间:2017-07-21 11:47:13

标签: javascript r shiny rhandsontable

我在闪亮的应用程序中有一个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

})

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

对不起,我太快问了这个问题。在花了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)

希望这有帮助!