我正在寫一個Shinyapp,使用戶能夠將新條目輸入到MongoDB中,並從中刪除特定的行。爲什麼我使用不同的actionLink後,我的Shiny(R)actionButton沒有響應?
我想添加一個功能,可以通過保存行的臨時副本來撤消上次刪除。它似乎工作正常,但在使用撤消之後,出於某種原因,刪除按鈕不起作用了,我不知道爲什麼。
我想也許它有一些事實,有一些其他地方,我使用觀察員的兩個按鈕,但我不明白爲什麼會導致任何問題(我需要他們的應用程序以正常工作) - 無論如何,他們不會阻止我逐一刪除多行,只要我不使用undo功能。你可以從下面的代碼中看到,我已經在其中加入了一堆print()函數來試圖找出它的前進方向。奇怪的是 - 他們都沒有出現!就好像刪除按鈕根本不會在撤消使用後激活腳本。任何想法爲什麼?
UPDATE:下面是重現問題(不使用的MongoDB)server.R和ui.R短版:
server.R
tempEntry<-NULL
shinyServer(function(input, output, session) {
dat<-data.frame(nums=1:3,ltrs=c("a","b","c"))
## Action: Delete entry
output$delError<-renderText({
input$delButton
isolate({if (!is.na(input$delNum)) {
tempEntry<<-dat[input$delNum,]
output$undo<<-renderUI({
actionLink("undo","Undo last delete")
})
dat<<-dat[-input$delNum,]
print("deleted")
print(dat)
} else print("nope2")
})
})
## Action: Undo delete
output$undoError<-renderText({
input$undo
if (!is.null(input$undo)) {
if (input$undo>0) {
isolate({if (!is.null(tempEntry)) {
dat<<-rbind(dat,tempEntry)
tempEntry<<-NULL
output$delError<<-renderText({""})
print(dat)
} else print("nope3")
}) } else print("undo==0") } else print("undo null")
})
})
ui.R:
library(shiny)
shinyUI(navbarPage("example",
tabPanel("moo",
titlePanel(""),
fluidPage(numericInput("delNum","Row to delete",value=NULL),
actionButton("delButton","Delete row"),
uiOutput("undo"),
div(p(textOutput("delError")),style="color:red"),
div(p(textOutput("undoError")),style="color:blue")
))))
(這也給出了一個錯誤「參數1(類型'列表')不能由'貓'處理刪除一行後,我不知道爲什麼......但問題不是似乎與此有關)。
謝謝!
你可以給爲重現此問題儘可能小的'server.R'和'ui.R'文件? –
嗨Marat,感謝評論。我編輯了我的問題,以包含一個短版本的server.R和ui.R,它重現了這個問題。 – doviod