У меня есть рулетка в блестящем приложении, у которого есть 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 часа на этом и разместив его здесь, я нашел простое решение: добавьте maxRows = 10
к rhandsontable
, и это.
rhandsontable(data.frame(rv_data),
fillHandle = list(direction='vertical', autoInsertRow=FALSE),
maxRows = 10) %>%
hot_context_menu(allowRowEdit = TRUE, allowColEdit = FALSE)
Делает ли это то, что вы хотите? Он не использует 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)
Надеюсь это поможет!
customOpts
.