Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 闪亮:删除行的次数不能超过1次_Javascript_R_Datatables_Shiny - Fatal编程技术网

Javascript 闪亮:删除行的次数不能超过1次

Javascript 闪亮:删除行的次数不能超过1次,javascript,r,datatables,shiny,Javascript,R,Datatables,Shiny,我正在开发一款闪亮的应用程序。server.R包含如下代码 dFt1 <- reactiveValues() dFt1$dat <- data.frame(loadTransactionData()) ... output$t_tab_1 <- DT::renderDataTable({ DT::datatable( dFt1$dat ,selection = list(mode = "single") ,options

我正在开发一款闪亮的应用程序。server.R包含如下代码

dFt1 <- reactiveValues()
dFt1$dat <- data.frame(loadTransactionData())
...
output$t_tab_1 <- DT::renderDataTable({
    DT::datatable(
        dFt1$dat
        ,selection = list(mode = "single")
        ,options = list(
            rownames = TRUE
            ,pageLength = 10
            ,order = list(list(2,"desc"),list(1,"asc"))
        )
    )
})
...
observe({
    if (is.null(input$delete) || input$delete == 0){return()}
    session$sendCustomMessage(
        type = 'jsCode'
        ,list(value = 'confirm("Are You Sure?");')
    )
})

observeEvent(input$deleteConfirmChoice, {
    if (input$deleteConfirmChoice == "TRUE") {
        x <- input$t_tab_1_rows_selected
        deleteTransaction(x)
        isolate(dFt1$dat <- dFt1$dat[row.names(dFt1$dat) != x, ])
    }
})  

deleteTransaction <- function(x) {
    qy <- "DELETE FROM Transactions where timestamp = '<t>'"
    qy <- gsub("<t>",x,qy)
    db <- dbConnect(SQLite(), dbname=systemDatabase)
    dbGetQuery(db,qy)
    dbDisconnect(db)
}

dFt1好!终于找到了一些有用的东西

    observeEvent(input$deleteConfirmChoice, {
    if (input$deleteConfirmChoice == "TRUE") {
        x <- input$t_tab_1_rows_selected
        deleteTransaction(x)
        isolate(dFt1$dat <- dFt1$dat[row.names(dFt1$dat) != x, ])
        shinyjs::disable("delete")
        shinyjs::disable("edit")
        session$sendCustomMessage(
            type = 'jsCode'
            ,list(value = '1 != 1;')
        )
    }
})  
observeEvent(输入$deleteConfirmChoice{
if(输入$deleteConfirmChoice==“TRUE”){

这里是另一种方法

我更改了传递给会话$sendCustomMessage的javascript代码。单击“否”按钮返回0。单击“是”按钮返回一个随机数。我希望这将保证在连续两次单击“是”按钮时获得不同的值

    observe({
    if (is.null(input$delete) || input$delete == 0){return()}
    session$sendCustomMessage(
        type = 'jsCode'
        ,list(value = 
            '
            (function() {
                if (confirm("Are you sure?")) {
                    return Math.random()*3 + 1;
                } else {
                    return 0;
                }
            })()
            '
        )
    )
})

observeEvent(input$deleteConfirmChoice, {
    if (input$deleteConfirmChoice == "TRUE") {
        x <- input$t_tab_1_rows_selected
        deleteTransaction(x)
        isolate(dFt1$dat <- dFt1$dat[row.names(dFt1$dat) != x, ])
    }
})  
观察({
如果(is.null(输入$delete)|输入$delete==0){return()}
会话$sendCustomMessage(
类型='jsCode'
,列表(值=
'
(功能(){
如果(确认(“你确定吗?”){
返回Math.random()*3+1;
}否则{
返回0;
}
})()
'
)
)
})
observeEvent(输入$deleteConfirmChoice{
if(输入$deleteConfirmChoice==“TRUE”){

x我想我有一些线索。在第一次尝试中,我单击了OK按钮,将input$deleteConfirmChoice设置为TRUE。当我第二次这样做时,它的值仍然为TRUE,因此值没有变化。因此,代码无法执行。如何修复此问题?嗨,我是shinyjs的作者,我只想指出,如果您使用的是shinyjs,您不应该使用
会话$sendCustomMessage
——您应该查看
shinyjs::extendShinyjs
,以简化调用javascript函数的过程