問題
私のコードでは、rhandsontable
にを表示したいと思いmodal
ます。モーダルを最初に表示したとき、テーブルは適切にレンダリングされています。ただし、モーダルを閉じて(基になるデータを変更せずに)再度開くと、テーブルの一部しか表示されません。テーブルをクリックして初めて、正しくレンダリングされます。モーダルを再度開く前にデータが変更された場合、テーブルは再び適切にレンダリングされます。
質問
どうすればそれを回避できますか?回避策としてjavascript
を強制的handsontable
に再レンダリングするために呼び出すことができるルーチンはありますか?
Reprex
library(shiny)
library(rhandsontable)
ui <- fluidPage(actionButton("show", "show"),
actionButton("change", "Change"))
server <- function(input, output, session) {
dat <- reactiveVal(data.frame(x = runif(2),
y = runif(2)))
observeEvent(input$show, {
showModal(modalDialog(rHandsontableOutput("hot")))
})
observeEvent(input$change, dat(data.frame(x = runif(2),
y = runif(2))))
output$hot <- renderRHandsontable(rhandsontable(dat()))
}
エラーを再現する方法
スクリーンショット
環境
R version 3.5.0 (2018-04-23)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252
[3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C
[5] LC_TIME=German_Germany.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] shiny_1.1.0 rhandsontable_0.3.6
loaded via a namespace (and not attached):
[1] Rcpp_0.12.17 digest_0.6.15 later_0.7.2 mime_0.5
[5] R6_2.2.2 xtable_1.8-2 jsonlite_1.5 magrittr_1.5
[9] rlang_0.2.1 promises_1.0.1 tools_3.5.0 htmlwidgets_1.2
[13] httpuv_1.4.3 yaml_2.1.19 compiler_3.5.0 htmltools_0.3.6
ブラウザでテスト済み:Chromeバージョン69.0.3497.100、IE 11
最もエレガントなソリューションではありませんが、これは機能します。
library(shiny)
library(rhandsontable)
ui <- fluidPage(actionButton("show", "show"),
actionButton("change", "Change"))
server <- function(input, output, session) {
dat <- reactiveVal(data.frame(x = runif(2),
y = runif(2)))
dat1 <- reactive({
if(is.null(input$hot)){
dat()
} else {
as.data.frame(hot_to_r(input$hot))
}
})
observeEvent(input$show, {
showModal(modalDialog(rHandsontableOutput("hot")))
})
observeEvent(input$change,
dat(data.frame(x = runif(2), y = runif(2))))
output$hot <- renderRHandsontable(rhandsontable(dat1()))
}
shinyApp(ui,server)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加