【发布时间】:2017-03-30 12:46:17
【问题描述】:
我有一个显示模态的函数,当单击保存按钮时,我有一个输入来更改执行函数的名称,并且我有验证绑定到输入:
editNameDialog <- function(input, value, name, save) {
showModal(modalDialog(
textInput("modalNewName", paste("Enter", name, ":"), value),
title = paste("Edit", name),
easyClose = TRUE,
footer = div(
modalButton("Cancel"),
actionButton("modalSaveName", "Save", class = "btn-primary")
)
))
validName <- function() {
nchar(input$newName) > 5
}
observeEvent(input$modalNewName, {
if (validName()) {
shinyjs::enable("modalSaveName")
} else {
shinyjs::disable("modalSaveName")
}
});
observeEvent(input$modalSaveName, {
save(input$modalNewName)
removeModal()
}, ignoreInit = TRUE, once = TRUE)
}
我这样调用这个函数(来自 server.R):
editNameDialog(input, "default value", "enter name", function(value) {
other$name <- value
})
它可以工作,但是当我执行该函数两次时,观察者 input$modalNewName 每次按键都会执行两次。如何在添加新事件之前删除事件?
【问题讨论】:
-
你能发布一个最小可重现的例子吗?
-
@mlegge 我删除了不需要的函数。
-
可重现的示例,如整个应用程序运行的最小服务器和 ui 对象
-
@mlegge 用户界面可以是空的,服务器可以有这个功能。
-
如果您搜索如何删除事件,我们在我们的应用程序中最终覆盖了删除先前事件的 observeEvent 函数,我们从闪亮的源代码中复制了代码并进行了相应的修改。