闪亮:与弹出消息和数据表冲突

时间:2017-05-30 18:37:29

标签: r shiny popupwindow shinyjs shinybs

我正在创建一个带有表单的应用程序,供用户填写详细信息,然后按“提交”按钮:之后会将一行添加到汇总输入数据的数据框中。每个条目都有一个唯一的标识符,例如。名称。

如果进行了新的提交,但是引用了相同的标识符,我想要一个弹出框警告用户他们将要覆盖原始数据。

使用从this帖子中获取的信息,我已经部分地管理了目标。代码按预期执行更新(在运行下面的示例中,这在print()命令中得到证明),但ui不会像我期望的那样更新。

下面我已经包含了一个最小的工作示例,如果有人输入(例如)b到“行名称:”字段,10进入“新值:”字段,然后单击“分配新值”,然后弹出框出现,但上面的数据表不会改变,而且它似乎改变了阴影。然后,如果你重复第二个命令,例如。 b,8,“分配新值”,然后格式化恢复正常,两个提交都被视为已生效。

如果有人能解释为什么会发生这种情况,以及如何让应用程序按预期运行(例如,在第一次按键点击后更新表格),我将非常感激。

此外,如果有人知道如何扩展这个以接受/拒绝更新,那就太好了!我的意思是,在弹出框中选择“你确定要更新第b行吗?”,以及选项是/否。

请注意,在下面的示例中,我使用了shinyjs :: alert的解决方案(请参阅上面引用的帖子中的评论),我之前尝试过使用大部分帖子中概述的方法,但遇到了同样的问题。

由于

library(shiny)
library(shinyjs)
library(DT)

ui <- fluidPage(
  useShinyjs(),
  dataTableOutput("DF_table"),
  hr(),
  fluidRow(
    column(4, 
           textInput("rowName", "Row Name:", NULL) ),
    column(4,
           numericInput("newValue", "New Value:",NULL) ),
    column(4,
           actionButton("assignValue", label = h5("Assign New Value"), width = "100%" ) )
  )

)

server <- function(input, output, session) {

  rvs <- reactiveValues( DF = data.frame(name = c("a", "b", "c"), value = 1:3 ) )

  observeEvent(input$assignValue,{

      # Test if the supplied row name corresponds to a row of DF.
      if(input$rowName %in% rvs$DF[,"name"] ){

        # If it does, pop up box warns user that the supplied row is being over written.
        shinyjs::alert(paste("Reassigning value of", input$rowName, sep=" ") )

        # Over writes the value in the selected row, with the new value.
        rvs$DF[match(input$rowName, rvs$DF[,"name"]), "value"] <- input$newValue
        print(rvs$DF)
      }
  })

  # Output data table.
  output$DF_table <- renderDataTable(rvs$DF, rownames = FALSE)

}


runApp(list(ui = ui, server = server))

0 个答案:

没有答案