【问题标题】:Scoping issues with updateNumericInputupdateNumericInput 的范围问题
【发布时间】:2015-09-03 18:53:41
【问题描述】:

我有一些 numericInputs 放入 DT 数据表的几列中。我想允许用户单击一个按钮,然后将输入从第一列复制到其他列。我能够为不属于数据表的 numericInputs 进行这项工作,但对数据表内的 numericInputs 没有任何反应。下面给出了我的问题的简化示例。我还包括一个独立 numericInput 的工作示例,它不是数据表的一部分,以演示我正在寻找的行为。

library(shiny)
library(DT)

shinyApp(
  server = shinyServer(function(input, output, session) {

    output$Table <- DT::renderDataTable({

      observeEvent(input$button1, { 
        v <- input$Number.1.1
        updateNumericInput(session,"Number.2.1", value = v)
      })


      temp <- data.frame(c(1:5))
      temp$Numbers.1 <- ""
      temp$Numbers.2 <- ""

      sapply(1:5, FUN = function(i){
        temp$Numbers.1[i] <<- as.character(numericInput(paste0("Number.1.", i), "", value = NULL, min = 0, max = 10, step = 0.01))
      })

      sapply(1:5, FUN = function(i){
        temp$Numbers.2[i] <<- as.character(numericInput(paste0("Number.2.", i), "", value = NULL, min = 0, max = 10, step = 0.01))
      })

      datatable(temp,escape = FALSE, rownames = FALSE, options = list(sort = FALSE, paging = FALSE, searching = FALSE))

  })

  observeEvent(input$button2,{
    v <- input$Number.3
    updateNumericInput(session,"Number.4", value = v)
  })  
}),

  ui = fluidPage(
    br(),
    actionButton("button1","Copy"),
    dataTableOutput("Table"),
    br(),
    actionButton("button2","Copy"),
    numericInput("Number.3", "Number 3", value = NULL, min = 0, max = 10, step = 0.1),
    numericInput("Number.4", "Number 4", value = NULL, min = 0, max = 10, step = 0.1)
  )
)

我也尝试将 observeEvent 放在 renderDataTable 之外,但这没有帮助。由于该按钮适用于独立的 numericInputs,我猜这是某种范围问题,但我一直无法弄清楚如何解决它。

提前感谢您的帮助!

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    我解决了我的问题。 (事实证明我其实知道答案,但脑子里放了个屁。)renderDataTable({}) 内部的 datatable() 函数应该是:

    datatable(temp,escape = FALSE, rownames = FALSE, options = list(sort = FALSE, paging = FALSE, searching = FALSE,
                                                                          preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
                                                                          drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')))
    

    【讨论】:

      猜你喜欢
      • 2014-12-28
      • 2014-01-28
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2010-11-09
      相关资源
      最近更新 更多