r - R Shiny - 使用 javascript 直接从 UI 触发闪亮警报弹出窗口
问题描述
使用以下代码,我可以alert
通过单击 fileInput 的问号来触发纯 javascript:
fileInput('peptides',
span("Peptides file ",
id="peptidesSpan",
tags$a(
tags$i(class='fa fa-question-circle'),
href = "#",
onclick = "alert('Oops!'); return false;")
),
multiple=FALSE,
accept = c('text/csv','text/comma-separated-values',
)
)
我想知道我是否可以触发shinyalert
弹出窗口(https://github.com/daattali/shinyalert/)而不是直接形成 UI 的简单 javascript 警报,而服务器端没有任何观察者。
就像是:
shinyalert("Oops!", "Something went wrong.", type = "error")
如果没有解决方法可以做到这一点,那么也欢迎观察者提出任何其他建议。
解决方案
我认为使用观察者一点也不方便。
而不是alert()
,调用Shiny.setInputValue(id, value);
,然后在您的服务器端你可以observeEvent(input[id], { shinyalert() })
。
阅读本文了解详情:https ://shiny.rstudio.com/articles/communicating-with-js.html
您只需要使用一个观察代码块即可实现此目的。
一个例子
在您的 UI Javascript 代码中定义一个自定义函数并在您的onclick
. 您可以将此函数放在项目文件夹中“www”文件夹中的 helper.js 中,即www/helper.js
. 将此文件包含在您的 Shiny UI 代码中tags$head(tags$script(src = "helper.js"))
function showAlert(message, type = "info") {
Shiny.setInputValue(
'alertMessage',
{
message: message,
type: type
},
{ priority: 'event' }
);
}
然后在 Shiny 服务器端定义观察者一次
observeEvent(input$alertMessage, {
alertData <- input$alertMessage
req(alertData)
shinyalert("title", alertData$message, type = alertData$type)
})
推荐阅读
- javascript - 反应映射渲染问题
- c - 嵌套函数导致内核版本 > 5.7 上的 C 中的分段错误
- sql-server - 如何删除一个表中 ID 与字段为特定值的另一表行匹配的行?
- python - 网站所有页面上的 Flask WTForms 搜索栏
- django - 有没有比这更好的方法来为多个应用程序加载 Django 静态目录?谢谢
- vue.js - Vue 单元测试调整屏幕大小并更新 DOM
- javascript - Angular-如何根据多选选项显示输入字段?
- java - 在 Apache Beam 中进行 SQL 转换时如何将 int 转换为布尔值
- android - 如何处理来自 volley onResponse 方法的网络访问
- javascript - 使用反引号的 usemin-cli 和 javascript 有问题