Как ограничить макс. количество строк

1

У меня есть рулетка в блестящем приложении, у которого есть 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

})

Есть идеи?

Теги:
shiny
rhandsontable

2 ответа

1
Лучший ответ

Извините, я слишком быстро задал этот вопрос. Проведя 2 часа на этом и разместив его здесь, я нашел простое решение: добавьте maxRows = 10 к rhandsontable, и это.

 rhandsontable(data.frame(rv_data),
                fillHandle = list(direction='vertical', autoInsertRow=FALSE),
                maxRows = 10) %>%
    hot_context_menu(allowRowEdit = TRUE, allowColEdit = FALSE)
  • 0
    Это более элегантное решение, чем мое. ;) Я был незнаком с пакетом rhandsontable, поэтому создал свое собственное решение ..
  • 0
    Печально то, что в документации нет ничего об этом, и вряд ли есть примеры использования customOpts .
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)

Надеюсь это поможет!

  • 0
    Извините, что потратил ваше время на это. Я только что нашел решение - см. Мой ответ ниже
  • 0
    Нет проблем, рад, что вы смогли решить вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню