- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Shiny 模块内使用模态窗口。用户与模态窗口交互,模块处理用户的输入。
在这个最小的示例中,当用户单击“关闭模态”按钮时,模块应该删除模态:
library(shiny)
# Modal module UI
modalModuleUI <- function(id) {
ns <- NS(id)
actionButton(ns("openModalBtn"), "Open Modal")
}
# Modal module server
modalModule <- function(input, output, session) {
myModal <- function() {
modalDialog(
actionButton("closeModalBtn", "Close Modal")
)
}
# Show modal dialog on start up
observeEvent(input$openModalBtn,
ignoreNULL = FALSE,
showModal(myModal())
)
# close modal on button click (not working)
observeEvent(input$closeModalBtn, {
removeModal()
})
}
# Main app UI
ui <- fluidPage(modalModuleUI("foo"))
# Main app server
server <- function(input, output, session) {
callModule(modalModule, "foo")
}
shinyApp(ui, server)
但是,单击“关闭模态”按钮不会触发模块服务器函数中的 observeEvent()
。我无法弄清楚如何访问(即观察)模块中模式窗口的内容。我猜这是一个命名空间问题。
编辑:interactive example现在可以了。请参阅下面我的回答。
最佳答案
重读this后我自己弄清楚了更仔细地。就像 renderUI
模态中的 id 元素需要包裹在 ns()
中使它们在模块命名空间中可用。必须使用 ns <- session$ns
显式地将命名空间加载到模式中,像这样:
library(shiny)
# Modal module UI
modalModuleUI <- function(id) {
ns <- NS(id)
actionButton(ns("openModalBtn"), "Open Modal")
}
# Modal module server
modalModule <- function(input, output, session) {
myModal <- function() {
ns <- session$ns
modalDialog(actionButton(ns("closeModalBtn"), "Close Modal"))
}
# open modal on button click
observeEvent(input$openModalBtn,
ignoreNULL = FALSE, # Show modal on start up
showModal(myModal())
)
# close modal on button click
observeEvent(input$closeModalBtn, {
removeModal()
})
}
# Main app UI
ui <- fluidPage(modalModuleUI("foo"))
# Main app server
server <- function(input, output, session) {
callModule(modalModule, "foo")
}
shinyApp(ui, server)
注意:如果 myModal 函数定义在模块服务器函数之外,则调用它时必须传递 session ,即showModal(myModal(session))
和myModal <- function(session) {...}
.
我已经更新了 example app这样它现在就可以工作了,并且还添加了一个 textInput。
关于r - 在 Shiny 模块中使用模态窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48127459/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!